Android中Blade的使用方法
作者:性格分裂程序媛 发布时间:2023-04-25 11:29:54
启动Activity并传递参数
Extra
正常情况下启动Activity并且传递参数的代码:
Intent intent = new Intent(context,LoginActivity.class);
intent.putExtra("phone","123456);
intent.putExtra("pwd","123456);
startActivity(intent);
使用Blade启动Activity的方式
public class LoginActivity extends AppcompatActivity{
@Extra
String mText;
@Extra
MyData mData;
}
通过上面的代码就会自动生成一个如下两个方法
Intent forX(Context c, T1 extra1[, T2 extra2, ...])
void startX(Context c, T1 extra1[, T2 extra2, ...])
然后我们就可以直接通过 I.startLoginActivity 来启动Activity。
创建Fragment实例
@Arg
用来为Fragment生成newInstance方法
通常我们创建Fragment对象都是些如下的样板代码
public class MyFragment extends Fragment{
public MyFragment newInstance(String data){
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putExtra("data",data);
fragment.setArguments(bundle);
return fragment;
}
...
}
使用Blade的方式
public class MyFragment extends Fragment {
@Arg
String mText;
@Arg
MyData mData;
}
自定义序列化
public class MyFragment extends Fragment {
@Arg(MyTypeBundler.class)
MyType mMyType;
}
public class MyTypeBundler implements Bundler<MyType> {
void save(@Nullable final MyType value, @NonNull final Bundle state) {
// save given value to the state
}
@Nullable
MyType restore(@NonNull final Bundle state) {
// restore and return value from state
}
}
@Parcel
当我们创建一个实体类需要实现Parcelable的时候,可以按如下的方法写
@blade.Parcel
public class MyClass implements Parcelable {
String text;
int number;
boolean flag;
double[] doubleArray;
protected MyClass(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
如果某个字段想忽略,不需要被序列化的话,使用 @blade.ParcelIgnore
Mvp
Mvp是和Dager配合使用的。
第一步:在你的build.gradle中添加dager依赖
compile 'com.google.dagger:dagger:2.x'
apt 'com.google.dagger:dagger-compiler:2.x'
第二步:创建一个继承自IView的接口
public interface IMyView extends blade.mvp.IView {
void show(String something);
}
第三步:创建Prensenter和View接口相互影响
public class MyPresenter extends blade.mvp.BasePresenter<IMyView> {
public void onUserDidSomething() {
String s = // do something ...
if (getView() != null) {
getView().show(s);
}
}
//...
}
第四步:创建View的实现,使用@Inject注入Presenter,现在支持Fragmnt,Activit,View
public class MyView extends android.support.v4.app.Fragment implements IMyView {
@Inject
MyPresenter mPresenter;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
yourDaggerComponent.inject(this);
}
@Override
void show(String something) { /* ... */ }
// ...
}
第五步:Activity中包含存在Presenter的Fragment,View,那么该Activity需要使用@Blade注解一遍让Blade知道。
State
简化状态管理, @State 注解会生成一个帮助类,里面包含两个静态的方法:
public class StateArgFragment extends Fragment {
@Arg
@State
int num;
}
@Weave(
into = "0_onSaveInstanceState",
args = {"android.os.Bundle"},
statement = "eu.f3rog.blade.sample.state.StateArgFragment_Helper.saveState(this, $1);"
)
public static void saveState(StateArgFragment target, Bundle state) {
if (state == null) {
throw new IllegalArgumentException("State cannot be null!");
}
BundleWrapper bundleWrapper = BundleWrapper.from(state);
bundleWrapper.put("<Stateful-num>", target.num);
}
@Weave(
into = "1^onCreate",
args = {"android.os.Bundle"},
statement = "eu.f3rog.blade.sample.state.StateArgFragment_Helper.restoreState(this, $1);"
)
public static void restoreState(StateArgFragment target, Bundle state) {
if (state == null) {
return;
}
BundleWrapper bundleWrapper = BundleWrapper.from(state);
target.num = bundleWrapper.get("<Stateful-num>", target.num);
}
继承自Fragment、Activity或View的类都会自动管理状态。自定义序列化的功能如上所示。
Blade可以让我们少写很多的样板代码,具体的我还没有应用到项目中,之后会在项目中进行使用,用来使项目看起来更加清晰。
Blade地址: https://github.com/FrantisekGazo/Blade
总结
以上所述是小编给大家介绍的Android中Blade的使用方法网站的支持!
来源:https://www.jianshu.com/p/0c875477ec03


猜你喜欢
- 限流背景在早期的计算机领域,限流技术(time limiting)被用做控制网络接口收发通信数据的速率。可以用来优化性能,减少延迟和提高带宽
- 本文实例为大家分享了Android实现掷骰子效果的具体代码,供大家参考,具体内容如下利用handler接受子线程的消息完成骰子点数的不断更替
- 本文主要介绍了Spring Security OAuth2 实现登录互踢的示例代码,分享给大家,具体如下:背景说明一个账号只能一处登录,类似
- 本文实例为大家分享了Unity生成文本验证码的具体代码,供大家参考,具体内容如下文本验证码由于我经常使用Unity进行webgl版本的开发,
- 防止程序运行多个实例的方法有多种,如:通过使用互斥量和进程名等.而我想要实现的是:在程序运行多个实例时激活的是第一个实例,使其获得焦点,并在
- 项目中遇到了下载文件文件名是中文而且还有空格如果不对连接进行处理下载就会报错要想解决这个问题只需对你的url 进行编码然后替换空格用编码表示
- 1.场景线程池使用DiscardOldestPolicy拒绝策略,阻塞队列使用ArrayBlockingQueue,发现在某些情形下对于得到
- 这里我们以拨打电话申请权限来写个小例子,也就是CALL_PHONE,因为拨打电话会涉及用户手机的资费问题,因而被列为了危险权限,在Andro
- 1 Mybatis-Plus简介Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达
- 对Jpa Entity关系映射中mappedBy的理解mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段数
- 定义注解也叫原数据,它是JDK1.5及之后版本引入的一个特性,它可以声明在类、方法、变量等前面,用来对这些元素进行说明。作用生成文档:通过代
- 我们有时候会遇到这样的情况,需要获取某些中文的拼音、中文首字母缩写和中文首字母,下面我将为大家介绍一下如何获取中文拼音的缩写。1、项目建立和
- Android 原生的按钮点击状态是有变化的,但是如果是自己加了一个.png格式的图片为背景色,按钮点击就不会有任何效果,为了达到点击按钮有
- 上一篇文章: # Android 10 启动分析之Zygote篇 (三)紧接着上一篇文章的内容,我们从这篇文章开始来分析一下 SystemS
- 本文实例讲述了Android编程中自定义dialog用法。分享给大家供大家参考,具体如下:dialog是android中提供的一组弹出提示框
- 本文实例为大家分享了Android自定义View实现遥控器按钮的具体代码,供大家参考,具体内容如下效果图:原理:onSizeChanged拿
- 在项目中经常会遇到对按钮、自定义控件的 Item 等防止多次重复的点击的问题,下面做一个小结。方法1:使用 RxJava 的 throttl
- 本文实例汇总了Java文件操作。分享给大家供大家参考,具体如下:1.创建文件夹//import java.io.*; File myFold
- 本文实例讲述了winform绑定快捷键的方法。分享给大家供大家参考。具体分析如下:第一种:Alt + *(按钮快捷键)在大家给button、
- 问题描述在使用poi-tl word模版工具时,发现生成的文档中,图片格式为嵌入型,有的图片甚至被表格遮挡一半。而自己想要的图片格式为上下型