Android基础之Fragment

来源:互联网 发布:vr视频软件 编辑:程序博客网 时间:2024/04/30 13:25

       之所以这么晚这么晚写关于Fragment这篇只是总结,是因为前期看Android第一行代码这本书的时候,以为Fragment只是在平板中用,也没有仔细看,到后来才知道Fragment的用处之大,所以回来补上。回来补修之路甚是艰难,看郭大神的讲解觉得很简单,但是最后最佳实践哪里感觉很吃力,于是又去看了Hongyang大神的博客,结果自己水平太菜,还是不能很好的理解,最后,终于翻出了琪爷给的视频,正好有Fragment的讲解,于是看了一天(有点夸张,年前这几天事情实在太多,只能找时间看),视频一共七集,已经看完四集了,今天把一些较为基础的东西来写写。

        先简单说一下Fragment(碎片):Fragment可以显示内容
                                                                     Fragment可以与用户交互
                     Fragment可以将UI划分为多个部分,单独实现
                                                                     Fragment和Activity有相似的生命周期
                                                                     Fragment可以在一个Layout有多个实例
                                                                     Fragment可以在不同的Activity中使用,每一个 Activity都保持这个Fragment的一个实例
                                                                     在Activity中可以动态的对于Fragment进行管理,例如移除、添加等

                        Fragment的生命周期:Activity与Fragment息息相关,一条绳子上的蚂蚱
                                                                  1.onAttach--onDetach
                                                                  2.onCreate—--onDestroy
                                                                  3.onCreateView---onDestroyView
                                                                  4.onActivityCreated
                                                                  5.onStart---onStop 
                                                                  6.onResume---onPause

下面说一下比较重要的几个生命周期:

1. onAttach
当Fragment被交给Activity的时候,将要进行创建
和显示的时候,回调这个方法
这个时候,Fragment已经可以获得Activity的实例
就可以实现一些Context的操作
2.onCreate
Fragment创建中的时候,会调用这个方法
通常在这个方法中可以进行一些fragment全局
使用的数据的初始化操作
与Activity的onCreate不同,不能设置与UI相关的
信息,因为与UI相关的内容在别的方法中设置
3.onCreateView
这个方法也是自动调用,用于返回Fragment的内容
这个方法在onCreate在调用之后,自动调用
这覆盖个方法,可以在这里添加监听事件在Fragment没有发生覆盖和隐藏
的时候是不会再次调用的,只有在onDestroyView
调用之后,Fragment再次显示的时候,才会再次调用
4.onActivityCreated()
通知Fragment Activity已经onCreate完毕了
可以使Fragment,通过Activity初始化后的数据
进行内容的更新相当于Fragment创建流程中,最后一个部分
能够进行数据初始化操作的地方    

了解这么多以后来说一下创建Fragment的步骤
为了能够使得载有碎片的活动能够适应不同版本的API,使得软件的兼容性更高,我们使用support-v4的jar包,而不是使用系统的android.app.fragment等。
如果项目中没有这个包的时候,请自行导入jar包,在这里不再赘述。

导入包之后就是我们要真正进行创建Fragment了
1.在activity.main.xml中创建<fragment>标签
这里一定要注意:1.一定要为其加上id属性,否则会报错
                                2.当创建好了相应的类文件之后,不要忘记回来加上name属性,为包名+类名
2.创建一个类文件以及布局文件,布局文件主要是用于向碎片中加载控件,<.fragment>标签实际上是给我们在VIew中占了一块地,具体的内容还要靠我们自己来加
  注意:类文件要继承Fragment(support-v4),一定要写出类的无参构造方法,这适用于在界面切换时候用的,不写会报错
就这样两步一个碎片就创建完毕了。

为了更好的体验碎片的作用,创建了两个活动,并且实现了两个在两个活动中都要使用同一个碎片,两个活动通过按钮的点击事件实现切换,再明白了碎片的创建过程之后,代码就很容易写出了。
通过这个小的项目可以看出碎片一个很大的有点就是代码的复用性强。
最后,千万不要忘记在配置文件中注册活动,我被坑惨了!!!
下面粘贴上详细的代码:
MainActivity.xml代码
public class MainActivity extends FragmentActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button=(Button)findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity.this,SecondActivity.class);                startActivity(intent);            }        });    }}
SecondActivity代码:
public class SecondActivity extends FragmentActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.second);    }}

Timer类代码:用于加载碎片的控件布局的类
public class Timer extends Fragment {    public  Timer()    {    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view=inflater.inflate(R.layout.timer,container,false);        final TextView textView=(TextView) view.findViewById(R.id.textview);        final SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");        textView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Date date=new Date();                textView.setText(format.format(date));            }        });        return view;    }}
activity_mian.xml
<Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下一页"/>    <fragment        android:id="@+id/timer_fragment"        android:name="com.example.fragmentlearning.Timer"        android:layout_width="250dp"        android:layout_height="250dp"        >    </fragment>
second.xml
<fragment    android:id="@+id/second_fragment"    android:name="com.example.fragmentlearning.Timer"    android:layout_width="wrap_content"    android:layout_height="wrap_content"></fragment>
timer.xml
<TextView    android:id="@+id/textview"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="点击获得当前时间"    android:textSize="20sp"    android:textColor="#eee650"    android:background="#f00"    android:padding="100dp"    android:layout_gravity="center"/>

这就是完整的代码了。
下面是程序运行截图:

今天收获其实还是不小的,关键是自己当遇到难题时候,不会在一味地烦恼,而是静下心来仔细思考,由于今天正式由Eclipse切换到Android studio,所以遇到了很多困难,但是最后还是一一解决了,不过以后还是要仔细认真思考,不要再犯忘记注册活动之类的错误。

明天继续学习,还是得早起,多利用一下早上的时间。
还是那句话:不想输,就别懒


0 0
原创粉丝点击