Android之道--Fragment使用记录

来源:互联网 发布:epub制作软件 wand 编辑:程序博客网 时间:2024/04/30 06:22

/*注 本文仅限作者自己使用,他人看不懂被误导后果自负撒,不过欢迎批评指正。

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_activitycontainer,继承的activity只要重写createFragment返回一个个性化的fragment就好辣!

Tips:

  • 容器视图资源ID(container)是FragmentManager队列中fragment的唯一标识符。
  • FragmentManager负责调用队列中fragment的生命周期方法。

2.然后工作就都从activity里转移到Fragment里啦,就目前我所知许多activity的方法在fragment里都有相应的方法哦

创建一个UIFragment的步骤和创建一个activity是相同的。
  1. 首先当然是先定义布局文件啦
  2. 创建Fragment类并设置其视图为定义的布局
  3. 通过代码连接布局文件中生成的组件
第一步都会得。
直接从第二步开始,
继承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

未完待续......






0 0
原创粉丝点击