Android中给fragment写入参数的轻量开发包FragmentArgs简介(2)
FragmentArgs是一个轻量的包,用于为你的fragment生成精确的java代码。
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();
}
}
只需要在你的Fragment类中加入注释字段,FragmentArgs就会生成引用代码。在你的Activity中你将使用生成的Builder类(你的fragment的后缀是”Builder”),而不是使用new MyFragment()或静态的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(Bundle)中声明的FragmentArgs.inject(this)。这个调用使你的fragment获得了生成代码的连接。你可能会问你自己:“我需不需要在每一个Fragment中的onCreate(Bundle)中加入inject()方法”。答案是no。你只需要在你的fragment基类中插入这一句就可以,并且在所有的fragment中继承它。
public class BaseFragment extends Fragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FragmentArgs.inject(this); // read @Arg fields
}
}
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();
}
}
信用:一部分的注释生成代码是基于Hugo Visser的Bundles项目。