开源框架:fragmentargs 的优势和使用方法

/**转帖注明出处*/

 FragmentArgs开源库的地址:https://github.com/sockeqwe/fragmentargs

    FragmentArgs是一个轻量级的开源库,他用来为你的Frgament生成准确java代码,这个库使用简单。下边是使用FragmentArgs的示例代码:

 

import com.hannesdorfmann.fragmentargs.FragmentArgs;

import com.hannesdorfmann.fragmentargs.annotation.Arg;

 

public class MyFragment extends Fragment {

 

@Arg

int id;

 

@Arg

String title;

 

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

FragmentArgs.inject(this); // read @Arg fields

}

 

@Override

public View onCreateView(LayoutInflater inflater,

ViewGroup container, Bundle savedInstanceState) {

 

Toast.makeText(getActivity(), "Hello " + title,

Toast.LENGTH_SHORT).show();

}

}

 大家会明显的发现使用FragmentArgs后我们少写了很多代码,这就是FrgamentArgs的强大之处。FragmentArgs会为你的Fragment中的注解属性生成样板代码。在你的Activity中你将使用FragmentArgs生成的Builder类代替new MyFragment(int id,String title)或静态的MyFragment.newInstance(int id,String title)方法。示例代码如下:

 

public class MyActivity extends Activity {

 

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

 

int id = 123;

String title = "test";

 

// Using the generated Builder

Fragment fragment =

new MyFragmentBuilder(id, title)

.build();

 

// Fragment Transaction

getFragmentManager()

.beginTransaction()

.replace(R.id.container, fragment)

.commit();

}

 

}

你可能注意到Fragment的onCreate()方法里边的FragmentArgs.inject(this)语句。当调用该语句的时候FragmentArgs将会为你的Fragment生成相应的代码。你可能会问那我是不是必须要在我的每一个Fragment的onCreate方法里边都要调用这个方法呀?你并不需要在你的每一个Fragment的onCreate方法里边都调用这个语句,FragmentsArgs.inject(this)语句支持继承,你只需要写一个Fragment基类,在基类的onCreate方法里调用FragmentArgs.inject(this)语句,然后让其它的Fragment继承这个基类就行了。就像下边的代码这样

 

public class BaseFragment extends Fragment {

 

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

FragmentArgs.inject(this); // 读取 @Arg 属性

}

}

 

public class MyFragment extends BaseFragment {

 

@Arg

String title;

 

@Override

public View onCreateView(LayoutInflater inflater,

ViewGroup container, Bundle savedInstanceState) {

 

Toast.makeText(getActivity(), "Hello " + title,

Toast.LENGTH_SHORT).show();

}

 

}

   首先我们从网址https://github.com/sockeqwe/fragmentargs处下载代码,解压后的目录如下所示

 

 

           这里的annotation和processor文件夹是两个项目,processor项目依赖于annotation项目。当你点开annotation目录和processor目录的时候你会发现他们并不是Eclipse项目。我们需要将这里的annotation和processor合并到一个项目里边并生成.jar文件。首先我们先新建一个java项目(注意是java项目不是android项目)

 

然后我们将annotation目录下的代码拷到刚新建的fragmentargs项目的src目录下(注意拷的时候从com目录开始拷)

 

 

然后我们在将processor目录下的代码拷到fragmentargs目录下(注意也是从com目录开始拷)

 

 

除此之外我们还需要将路径processor\src\main\resources里边的文件夹META-INF拷到fragmentargs项目的根目录下(即META-INF跟src是同级目录)

 

 

下边我们该生成.jar文件夹了。

 

 

 

 

 

点击finish后可能会弹出。。不要管他点击ok

现在.jar文件就生成成功了。

 

      现在我们来新建一个android项目,并将生成的.jar文件拷到新建的android项目的libs目录下:

 

 

同时需要额外设置的选项有,

1)           工程属性—>java Compiler Annotation Processing 勾选Enable project specific settingsEnable annotation prcessing

2)           如果需要生成源文件,则可以设置目标文件的存储路径。

3)           Factory Path中指定annotation processor所在的jar包。

 

 

经过上边的一系列设置之后,你就可以使用FragmentArgs库了。但是谷歌提供给开发者的Eclipse默认是没有带Annotation processing的。

 

解决方法: 

  需要配置一个插件:

就这些了,用起来确实不fragment加bundle方便。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值