Fragment碎片的创建和动态更新

Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块。

一,一个简单的fragment

1.创建两个局部文件,用于等待被调用

(1)left_fragment

(2)right_fragment

2.分别创建两个继承于fragment类的类

(1)leftFragment(加载xml文件)

public class LeftleftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.left_fragment,container,false);//动态加载xml
        return view;
    }
}

(2)rightFragment

我是代码(同上);

3.在activity所调用的xml中添加<fragment>控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/left_fragment"
        android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <fragment
        android:id="@+id/right_fragment"
        android:name="com.cenzhongman.myapplication.fragment.RightFragment"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
</LinearLayout>

二,动态切换fragment

4.在原基础之上创建AnotherRightFragment(指向要调用的layout)

我是代码(同上,较少重复加载)

5.在MainActivity所调用xml中更改布局方式

用两FrameLayout(强制左上角对齐的布局),来存放fragment,动态更新时候将会更换FrameLayout中的内容,也就是旗下的FrameLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/left_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <fragment
            android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/fragment" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/right_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <fragment
            android:name="com.cenzhongman.myapplication.fragment.RightFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </FrameLayout>
</LinearLayout>

6.在MainActivity中更换fragment

public void onClick(View v) {
                AnotherRightFragment anotherRightFragment = new AnotherRightFragment();
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction transaction = fragmentManager.beginTransaction();
                transaction.replace(R.id.right_fragment, anotherRightFragment);
                transaction.commit();//必须调用commit()方法,否则显示不出来
            }

        1. 创建待添加的碎片实例。
        2. 获取到 FragmentManager,在活动中可以直接调用 getFragmentManager()方法得到。
        3. 开启一个事务,通过调用 beginTransaction()方法开启。
        4. 向容器内加入碎片,一般使用 replace()方法实现,需要传入容器的 id 和待添加的碎
            片实例。
        5. 提交事务,调用 commit()方法来完成。

三,把fragment添加到返回栈

transaction.addToBackStack(null);//接收一个名字用于描述返回栈的状态,一般传入null即可

用fragment来做导航

1.在MainActivity的xml留出用于装fragment的容器

2.写好Fragment的xml描述文件

3.写四个Fragment的实现类,继承于Fragment

public class IdeaFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_idea,container,false);
        return view;
    }
}

4.MainActivity应继承于FragmentActivity,并创建Fragment对象

//定义fragment对象,基于v4包
    private Fragment study_fragment;
    private Fragment app_fragment;
    private Fragment idea_fragment;
    private Fragment personal_fragment;

    //定义fragmentManager对象
    FragmentManager mFragmentManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mFragmentManager = getSupportFragmentManager();//基于v4包
initView(); }

5.得到FragmentTransaction对象,并根据情况选择添加或者显示fragment

!!!一定要commit()!!!

FragmentTransaction transaction = mFragmentManager.beginTransaction();

idea_Button.setImageResource(R.drawable.idea_blue);
                idea_TextView.setTextColor(getResources().getColor(R.color.sky_blue));
                if (idea_fragment == null) {
                    idea_fragment = new IdeaFragment();
                    transaction.add(R.id.content, idea_fragment);
                    transaction.commit();
                } else {
                    transaction.show(idea_fragment);
                    transaction.commit();
                }

 参考资料:Fragment之底部导航栏的实现

岑忠满的博客新站点 https://cenzm.xyz
原文地址:https://www.cnblogs.com/cenzhongman/p/6045343.html