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
猜你喜欢
- 以前看到过个:Java开发手册(阿里巴巴-公开版),这是个pdf文档,里面描述了一些Java开发的规约,里面确实有很多好用的规约,要是在学校
- 1: * 的定义: * 实际上是一个类,这个类实现了特定的接口,然后将这个类在 web.xml 文件中进行描述,这样服务器在启动的时候就可
- 需求说明在对图像进行处理时,经常会有这类需求:想通过阈值对图像进行二值化分割,以提取自己感兴趣的区域,常见的阈值分割方法有常数分割、最大类间
- 相关阅读C#使用LINQ查询操作符实例代码(一)C#使用LINQ查询操作符实例代码(二)示例业务背景介绍示例参考《C#高级编程(第六版)》L
- 1.项目简绍本项目使用SpringBoot开发,jdbc5.1.48 Mybatis 源码可下载其中涉及功能有:Mybatis的使用,Thy
- 废话开篇:iOS与android在实现列表界面的时候是有重用机制的,目的就是减少内存开销,用时间换空间。个人感觉flutter并没有特别强调
- 前言在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小
- RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,
- Android超清晰6.0权限申请AndPermission的具体实现代码,供大家参考,具体内容如下前言这是我经常使用的框架,原因:1.思路
- 1.代码调试的重要性代码调试在程序开发阶段占有举足轻重的地位,可见代码调试的重要性。但是有一点必须强调:程序是设计出来的,而不是调试出来的。
- 本文实例为大家分享了android实现底部导航栏的具体代码,供大家参考,具体内容如下常见的底部导航栏动态效果实现步骤1.底部导航栏样式我们应
- java list,set,map,数组间的相互转换详解1.list转setSet set = new HashSet( new Array
- 本文主要介绍了关于c#和java base64不一致的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧不一致的问题不
- 1、接口:一种把类抽象的更彻底,接口里只能包含抽象方法的“特殊类”。接口不关心类的内部状态数据,定义的是一批类所遵守的规范。(它只规定这批类
- 先上图:新建好springboot项目之后这里没生成pom.xml文件我开始试了一下网上的方法,在新建的时候修改choose spring
- 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的
- 这篇文章主要介绍了Java如何利用return结束方法调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 1. 前言老板说,明天甲方要来看产品,你得造点数据,而且数据必须是“真”的,演示效果要好看一些,这样他才会买我们的产品,我好明年给你换个嫂子
- 前言在java里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对
- 最近在用SpringMvc做Http接口时,对方在调用我接口时发现Date格式的默认转化为long,因此在前端页面看到的是一串数字。我们可以