Fragments

1.定义
Fragment表现Activity中用户界面的一个行为或者是一部分。可以再Activity运行时添加或者删除。
2.生命周期
onCreate():在创建fragment时系统会调用此方法。可以在初始化想要在fragment中保持的那些必要的组件。
onCreateView():第一次为fragment绘制用户界面时调用此方法。返回函数所绘出的fragment的根View。
onPause():通常要在这里提交任何需要持久化的变化。
3.将fragment添加到activity之中
①.在activity的布局文件里声明fragment
在生命周期方面,activity与fragment之间一个很重要的不同,就是在各自的后台栈中是如何存储的。仅当你在一个事务被移除时,通过显式调用addToBackStack()请求保存的实例,该fragment才被置于由宿主activity管理的后台栈。

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <fragment android:name="com.example.news.ArticleListFragment"
                android:id="@+id/list"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />
        <fragment android:name="com.example.news.ArticleReaderFragment"
                android:id="@+id/viewer"
                android:layout_weight="2"
                android:layout_width="0dp"
                android:layout_height="match_parent" />
    </LinearLayout>
//**注意每个fragment都需要一个唯一的表示**

②.通过编码将fragment添加到已存在的ViewGroup中

FragmentManager fragmentManager = getFragmentManager()
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();

4.添加物界面的fragment
可以使用fragment为activity提供后台动作,却不需要实现这个方法。为无界面的字符串提供标签。可以通过findFragmentByTag()获取标签。
用android:tag属性提供一个唯一的字符串。。
5.管理Fragments
调用getFragmentManager()获得。
使用FragmentManager 可以做如下事情,包括:
使用findFragmentById()(用于在activity布局中提供有界面的fragment)或者findFragmentByTag()获取activity中存在的fragment(用于有界面或者没有界面的fragment)。
使用popBackStack()(模仿用户的BACK命令)从后台栈弹出fragment。
使用addOnBackStackChangedListener()注册一个监听后台栈变化的监听器
调用commit()并不立刻执行事务,相反,而是采取预约方式,一旦activity的界面线程(主线程)准备好便可运行起来。
6.创建Activity事件回调函数
在一些情况下可能需要fragment与activity共享事件。这样做的一个好方法是在fragment内部定义一个回调接口,并需要宿主activity实现它。

public interface OnArticleSelectedListener{
        public void setOnArticleSelected(Uri articleUri);
    }

    private  OnArticleSelectedListener mOnArticleSelectedListener;

    public void setOnArticleSelectedListener(OnArticleSelectedListener onArticleSelectedListener){
        mOnArticleSelectedListener = onArticleSelectedListener;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: "Unknown fragments"错误通常是由于在XML布局文件中引用了未定义的片段(fragment)而导致的。根据引用\[1\]中的信息,使用v4包的fragment时,XML布局文件的根节点应该使用FrameLayout而不是fragment。请确保你的XML布局文件中的根节点是FrameLayout,并且在代码中正确加载和管理片段。另外,根据引用\[2\]和引用\[3\]中的代码示例,你需要创建对应的PM_Fragment和LM_Fragment类,并在这些类中实现onCreateView方法来加载对应的布局文件。确保你的代码中没有引用未定义的片段,并正确加载和管理片段,这样就可以避免"Unknown fragments"错误的出现。 #### 引用[.reference_title] - *1* [xml中用fragment出现Error inflating class fragment的问题解决方案](https://blog.csdn.net/u013899706/article/details/43273889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Android Fragments](https://blog.csdn.net/LGGisKing/article/details/45463505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值