android学习笔记——Fragment(碎片)

这位大神的博客很值得大家好好读读。http://blog.csdn.net/lmj623565791/article/details/37970961
碎片的简单用法
使用静态的方式来添加两个碎片步骤:
1、写好两个碎片布局,一个左一个右。布局就是看你要展示什么东西啦。
2、分别为两个布局新建LeftFragment类和RightFragment类,继承自Fragment。用于将布局载入。
3、修改activity_main.xml中的文档,将两个fragment静态添加到其中去。

写一下在其中比较重要的地方:
在步骤2中,我们需要重写Fragment的onCreateView()方法,然后在这个方法中通过LayoutInflater的Inflate()方法将定义的布局文件加载进来。
看一下代码:
public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment,container,false);
        return view;
    }
}
做完以上后,我们需要修改activity_main.xml中的内容,即添加两个fragment。看代码:
< fragment
    android :layout_width= "0dp"
    android :layout_height= "match_parent"
    android :id= "@+id/left_fragment"
    android :name= "com.example.yawen_li.fragment.LeftFragment"
    android :layout_weight= "1"
    tools:layout="@layout/left_fragment" />
做完这些后就完成了,很简单是不是?但fragment的用处远不止这些,动态转换才是他最厉害的地方!接下来我们就来看看动态添加碎片
动态添加碎片
我们继上面的例子来扩展一下,设置成这样的情景:第一次显示时页面上看到左1和右1,点击一下左1中的按钮,右1变成右2。
我们先确定一下要做的事情:
1、写一下右2的布局文件
2、为右2布局新建Another_RightFragment类,将布局载入
3、修改一下activity_,main.xml中的文档
4、在MainActivity中添加一个Button的点击事件,并在该事件中写好fragment是如何替换的。(这里将是动态添加碎片的重点部分,一会我们细说)
好了,以上就是动态添加碎片的主要流程,让我们开始吧!
1、 2部分和前面是一样的,忘记的同学翻到前面去看一下就好,就是写一个布局,然后重新fragment的onCreateView方法把布局加载进去。
我们看一下步骤3中的activity_main.xml到底改变了哪些,看代码
< FrameLayout
    android :id= "@+id/right_layout"
    android :layout_width= "0dp"
    android :layout_height= "match_parent"
    android :layout_weight= "1">

    < fragment
        android :layout_width= "match_parent"
        android :layout_height= "match_parent"
        android :id= "@+id/right_fragment"
        android :name= "com.example.yawen_li.fragment.RightFragment"
        tools :layout= "@layout/right_fragment" />
</FrameLayout>
我们可以看到原本裸露在外面的fragment现在由一个FrameLayout(帧布局)包裹了起来。由于这里仅仅需要在布局里面放入一个碎片,所以对于FrameLayout来说是很合适的。
之后我们将在代码中替换FrameLayout里的内容,从而实现动态添加碎片的功能。
步骤4,接下来让我们来看MainActivity中的代码。
public class MainActivity  extends AppCompatActivity  implements View.OnClickListener {

    private Button  btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout. activity_main);
        btn = (Button) findViewById(R.id. btn);
        btn.setOnClickListener((View.OnClickListener)  this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn:
                Another_RightFragment fragment = new Another_RightFragment();//创建待添加的实例
                FragmentManager fragmentManager = getFragmentManager();     //获取到FragmentManager
                //开启一个事务,通过fragmentManager.beginTransaction()方法来开启
                FragmentTransaction transaction = fragmentManager.beginTransaction();
                //使用事务的replace()方法,向容器中添加碎片,传入一个容器的id,还有碎片的实例
                transaction.replace(R.id.right_layout,fragment);  
                transaction.addToBackStack(null);                            //添加到碎片栈中,方便返回时调用。(按返回找到上一个碎片)       
                transaction.commit();                                        //提交事务,调用commit()方法
                break;
            default:
                break;
        }
    }
}
在细说动态添加碎片之前,我们需要注意的一点是,该MainActivity在实现时需要实现View.OnClickListener这个接口,在我理解来是这样的:
fragment和Activity是很相似的,在同一个屏幕上当我们需要显示两个fragment时,其中各自的事件需要响应还得确定到底是哪个fragment中的组件被选中了,所以我们需要的是View这个值,也就出现了在点击事件中view.getId()这个方法了。

好了,说了这么多该把正主搬出来了。看看上面的代码,我在这总结一下动态添加的步骤
1、创建待添加的实例
2、获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到
3、开启一个事务,通过调用beginTransaction()方法开启
4、向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id 和待添加的碎片实例
5、提交事务,调用commit()方法来完成。
就是这样,就是这么简单~

在这里,需要介绍一下Fragment的生命周期:
onAttach     //创建与Acitvity的连接,绑定在一起
onCreate     //创建Fragment
onCreateView//创建View
onActivityCreated//创建出Activity
onStart       //开启活动
onResume   //我也不知道啊、、、
onPause     //暂停
onStop      //停止该Fragment
onDestoryView//销毁View
onDestory   //销毁Fragment
onDetach     //撤销与Activity的连接

有关fragment的生命周期在这篇博客中写的很详细。我们应该牢记生命周期的那两张图,严格按照顺序来走,才能理解Fragment和Activity是如何绑定在一起的,Fragment是如何依赖Activity进行活动的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值