Android应用开发中Fragment的静态加载与动态加载实例

2019-12-10 18:59:54王旭

 

2、动态地使用Fragment

上面已经演示了最简单的使用Fragment的方式,下面分享一下如何动态的添加、更新、以及删除Fragment。

 首先是,MainActivity的布局文件activity_main.xml,该文件布局文件上面的顶部是一个TitleFragment,是一个静态声明的Fragment。

中间也是一个Fragment,但是这个Fragment是动态使用的。

最下面是四个按钮。用include标签包含外部的布局文件进来的。

<RelativeLayout xmlns:android="http://www.easck.com/apk/res/android"
  xmlns:tools="http://www.easck.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <fragment
    android:id="@+id/id_fragment_title"
    android:name="com.example.dynamicfragment.TitleFragment"
    android:layout_width="fill_parent"
    android:layout_height="45dp" />

  <include
    android:id="@+id/id_ly_bottombar"
    android:layout_width="fill_parent"
    android:layout_height="55dp"
    android:layout_alignParentBottom="true"
    layout="@layout/bottombar" />

  <FrameLayout
    android:id="@+id/id_content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/id_ly_bottombar"
    android:layout_below="@id/id_fragment_title" />

</RelativeLayout>

然后是,MainActivity.java文件。也是我们这个demo当中最重要的代码文件,首先是将上面的布局文件通过setContentView()加载进来.然后是通过setDefaultFragment();将默认的ContentFragment动态的加载进来。接下来就是通过我们在最下面防止的四个按钮可以随意的动态切换Fragment。这也是为什么Fragment会有如此火的原因吧~~~^^

public class MainActivity extends ActionBarActivity implements OnClickListener {
  private ImageButton mTabWeixin;
  private ImageButton mTabFriend;
  private ImageButton mTabDiscover;
  private ImageButton mTabMe;

  private ContentFragment mWeiXinFragment;
  private FriendFragment mFriendFragment;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);

    initView();
  }

  public void initView() {
    // 初始化控件和声明事件
    mTabWeixin = (ImageButton) findViewById(R.id.weixin);
    mTabFriend = (ImageButton) findViewById(R.id.friend);
    mTabWeixin.setOnClickListener(this);
    mTabFriend.setOnClickListener(this);

    // 设置默认的Fragment
    setDefaultFragment();
  }

  @SuppressLint("NewApi")
  private void setDefaultFragment() {
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();

    mWeiXinFragment = new ContentFragment();
    transaction.replace(R.id.id_content, mWeiXinFragment);
    transaction.commit();
  }

  @SuppressLint("NewApi")
  @Override
  public void onClick(View v) {
    FragmentManager fm = getFragmentManager();
    // 开启Fragment事务
    FragmentTransaction transaction = fm.beginTransaction();
    switch (v.getId()) {
    case R.id.weixin:
      if (mWeiXinFragment == null) {
        mWeiXinFragment = new ContentFragment();
      }
      // 使用当前Fragment的布局替代id_content的控件
      transaction.replace(R.id.id_content, mWeiXinFragment);
      break;
    case R.id.friend:
      if (mFriendFragment == null) {
        mFriendFragment = new FriendFragment();
      }
      transaction.replace(R.id.id_content, mFriendFragment);
      break;
    }
    // transaction.addToBackStack();
    // 事务提交
    transaction.commit();
  }
}