Android学习笔记--Fragment控件

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961

自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~

本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activity交互?Fragment如何创建对话框?Fragment如何与ActionBar集成等等。

1、Fragment的产生与介绍

Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。

贴出代码

先贴出两个Fragment文件的代码

ShouYe.java

 1 package com.wuxianedu.mimixun;
 2 
 3 import android.support.v4.app.Fragment;
 4 import android.support.annotation.Nullable;
 5 import android.os.Bundle;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 //继承Fragment类
10 public class ShouYe extends Fragment {
11     /**
12      * 继承Fragment类需要重写两个方法
13      * 第一个onCreateView方法---返回布局
14      * 第二个onViewCreated---绑定控件
15      * @param inflater
16      * @param container
17      * @param savedInstanceState
18      * @return
19      */
20     @Nullable
21     @Override
22     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
23         View view = inflater.inflate(R.layout.activity_shou_ye, null);
24         return view;
25     }
26 
27     @Override
28     public void onViewCreated(View view, Bundle savedInstanceState) {
29         super.onViewCreated(view, savedInstanceState);
30     }
31 }

Gm.java

 1 package com.wuxianedu.mimixun;
 2 
 3 import android.support.v4.app.Fragment;
 4 import android.support.annotation.Nullable;
 5 import android.os.Bundle;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 
10 public class Gm extends Fragment {
11 
12     @Nullable
13     @Override
14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
15         View view = inflater.inflate(R.layout.activity_gm, null);
16         return view;
17     }
18     @Override
19     public void onViewCreated(View view, Bundle savedInstanceState) {
20         super.onViewCreated(view, savedInstanceState);
21     }
22 }

MainActivity.java

 1 package com.wuxianedu.mimixun;
 2 
 3 import android.support.v4.app.Fragment;
 4 import android.support.v4.app.FragmentManager;
 5 import android.support.v4.app.FragmentPagerAdapter;
 6 import android.support.v4.view.ViewPager;
 7 import android.support.v7.app.AppCompatActivity;
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.widget.RadioButton;
11 
12 public class BaseActivity extends AppCompatActivity implements View.OnClickListener {
13     //new一个fragment数组,有几个就new几个
14     private Fragment[] fragment = new Fragment[2];
15     //new一个RadioButton数组,
16     private RadioButton [] radioButtons =new RadioButton[2];
17     //滑动组件
18     private ViewPager viewpager;
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_base);
23         Initialize();
24     }
25     private void Initialize(){
26         /**
27          * 让fragment[0]的页面为new ShouYe();
28          * 让fragment[1]的页面为 new Gm();
29          */
30         fragment[0] = new ShouYe();
31         fragment[1] = new Gm();
32         //初始化viewpager
33         viewpager = (ViewPager) findViewById(R.id.fl_id);
34        // Fragment填充数据
35         MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
36        //Fragment填充数据
37         viewpager.setAdapter(myPagerAdapter);
38         radioButtons[0] = (RadioButton) findViewById(R.id.rb_weixin);
39         radioButtons[1] = (RadioButton) findViewById(R.id.rb_tongxunlu);
40 
41         radioButtons[0].setOnClickListener(this);
42         radioButtons[1].setOnClickListener(this);
43         //viewpager的滑动事件
44         viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
45             @Override
46             public void onPageSelected(int arg0) {
47                 radioButtons[arg0].setChecked(true);
48             }
49             @Override
50             public void onPageScrolled(int arg0, float arg1, int arg2) {
51             }
52             @Override
53             public void onPageScrollStateChanged(int arg0) {
54             }
55         });
56     }
57 
58     @Override
59     public void onClick(View v) {
60         switch (v.getId()) {
61             case R.id.rb_weixin://微信
62                 //跳转第一个界面
63                 viewpager.setCurrentItem(0,false);
64                 break;
65             case R.id.rb_tongxunlu://通讯录
66                 //跳转第二个界面
67                 viewpager.setCurrentItem(1,false);
68                 
69                 break;
70             default:
71                 break;
72         }
73     }
74 
75     /**
76      * Fragment填充数据
77      */
78     class MyPagerAdapter extends FragmentPagerAdapter {
79 
80         public MyPagerAdapter(FragmentManager fm) {
81             super(fm);
82             // TODO Auto-generated constructor stub
83         }
84 
85         @Override
86         public android.support.v4.app.Fragment getItem(int arg0) {
87             // TODO Auto-generated method stub
88             return fragment[arg0];
89         }
90 
91         @Override
92         public int getCount() {
93             // TODO Auto-generated method stub
94             return fragment.length;
95         }
96 
97     }
98 
99 }

这里要说到一下,使用Fragment要new一个内部类,如下

75     /**
76      * Fragment填充数据
77      */
78     class MyPagerAdapter extends FragmentPagerAdapter {
79 
80         public MyPagerAdapter(FragmentManager fm) {
81             super(fm);
82             // TODO Auto-generated constructor stub
83         }
84 
85         @Override
86         public android.support.v4.app.Fragment getItem(int arg0) {
87             // TODO Auto-generated method stub
88             return fragment[arg0];
89         }
90 
91         @Override
92         public int getCount() {
93             // TODO Auto-generated method stub
94             return fragment.length;
95         }
96 
97     }
98 
99 }

好了,代码都贴出来了,代码里面已经写了注释,大家看一下就可以看懂

原文地址:https://www.cnblogs.com/langfei8818/p/5943497.html