FragMent的静态加载和动态加载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DDK837239693/article/details/51433913
 <fragment
        android:name="com.example.myfragment.MyFragment"
        android:id="@+id/myfragment_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />


以上就是静态加载所用的布局,android:name属性中是MyFragment.java的全名,android:id中是Fragment的唯一标识(这个必须得加,否则报错,也可用android:tag属性来作唯一标识)。

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //做一个简单的UI操作,证明静态加载时我们可以直接获取到
        //Fragment中的UI控件
        TextView tv = (TextView) findViewById(R.id.textView);
        tv.setText("床前明月光");
    }
}
证明是可以直接获取id的


实现动态加载,我们需要先了解Fragment事务。熟悉数据库的同学都知道,事务指的就是一种原子性、不可拆分的操作。所谓的Fragment事务就是:对Fragment进行添加、移除、替换或执行其它动作,提交给Activity的每一个变化。这就是Fragment事务。

Fragment是UI模块,自然在一个Activity中可以不只有一个模块,所以Android提供了FragmentManage类来管理Fragment,FragmentTransaction类来管理事务。我们对Fragment的动态加载就是先将添加、移除等操作提交到事务,然后通过FragmentManage完成的。

通过FragmentManager.beginTransaction()我们可以开始一个事务。在事务中,我们可以对Fragment进行的操作以及对应的方法如下:
添加:add()
移除:remove()
替换:replace()
提交事务:commit()
上面几个是比较常用的,还有attach()、detach()、hide()、addToBackStack()等方法。
我们需要注意的是,Fragment以ID或Tag作为唯一标识,所以remove和replace的参数是Fragment,这个Fragment目标Fragment一致。在下面的示例里,我使用了一个栈记录所有添加的Fragment,然后在移除时使用。


       // 开启一个新事务
   transaction = manager.beginTransaction();
   // 使用add方法添加Fragment,第一个参数是要把Fragment添加到的布局Id
   // 第二个就是要添加的Fragment
      transaction.add(R.id.fragments, fragment);
      // 提交事务,否则添加就没成功
      transaction.commit();

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句
相关热词

没有更多推荐了,返回首页