• 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
  • 相关阅读:
    人到中年,奋斗了十几年结果却是负债累累,还要继续创业吗?
    迁移学习简述
    迁移学习简述
    关于mysql数据库的表概况 ,查看表状态
    关于mysql数据库的表概况 ,查看表状态
    关于mysql数据库的表概况 ,查看表状态
    关于mysql数据库的表概况 ,查看表状态
    一个简易的SocketIM
    一个简易的SocketIM
    一个简易的SocketIM
  • 原文地址:https://www.cnblogs.com/cenzhongman/p/6045343.html
Copyright © 2020-2023  润新知