/*注 本文仅限作者自己使用,他人看不懂被误导后果自负撒,不过欢迎批评指正。
1.抽象Activity,将重复代码(设置布局,添加Fragment。。。)放入抽象类
- public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract android.app.Fragment createFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_activity);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
//抽象方法 也就是模板,具体实现具体对待
.add(R.id.container,createFragment())
.commit();
}
}
}
这样新建的activity直接继承它就可以省掉配置fragment这一步了,只不过activity布局文件名和放置fragment的容器视图id要固定喽,
分别是fragment_activity和container,继承的activity只要重写createFragment返回一个个性化的fragment就好辣!
Tips:
- 容器视图资源ID(container)是FragmentManager队列中fragment的唯一标识符。
- FragmentManager负责调用队列中fragment的生命周期方法。
2.然后工作就都从activity里转移到Fragment里啦,就目前我所知许多activity的方法在fragment里都有相应的方法哦
创建一个UIFragment的步骤和创建一个activity是相同的。
- 首先当然是先定义布局文件啦
- 创建Fragment类并设置其视图为定义的布局
- 通过代码连接布局文件中生成的组件
第一步都会得。
直接从第二步开始,
继承Fragment或者其他巴拉巴拉更nx的Fragment,然后就是覆写各个生命周期来完成使命啦。不过Fragment的视图不再是在oncreate()中实现,而是在
onCreateView(LayoutInflater,ViewGroup,Bundle)中实现啦。这两个参数是必要参数,生成View并返回给托管activity。
View v = inflater.inflate(R.layout.fragment,container,false);
return v;三个参数分别是布局资源ID,父视图,告知布局生成器是否将生成的视图添加给父视图。传入false是因为我已经在抽象activity里添加啦
第三步:在fragment中关联组件
使用
View.findViewById(int)
方法。以前使用的
Activity.findViewById(int) 能够在后台自动调用
View.findViewById(int)
方法
3.表演才刚刚开始
1 使用fragment argument
我用它来----托管activity有话要对fragment说的时候。
附加 argument bundle 给fragment需要调用Fragment.setArguments(bundle)方法,而该方法需要在fragment创建后 添加给activity前完成
所以可以添加名为newInstance()静态方法给fragment类来完成fragment实例及bundle对象的创建及附加操作。
托管activity需要fragment实例时不再调用其构造方法,而是使用newInstance()方法,当然也可以传入任意想说的话啊,这个方法会在fragment创建后 添加给activity前
把悄悄话绑定到fragment然后返回fragment实例的。
剩下的工作就是在fragment中获取悄悄话啦。
Fragment.getArguments()
tips:
fragment也有 startActivityForResult onActivityResult 方法,因此
fragment能够从activity中接受返回结果,但不能产生返回结果,需要通知托管activity来返回结果:getActivity().setresult();
2 继承其他各种Fragment
未完待续......