UIfragment与fragmentManager

Posted 善倾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIfragment与fragmentManager相关的知识,希望对你有一定的参考价值。

为什么使用Fragment来管理用户界面?

  使用Fragment可以使得界面更为灵活,而且能够很好地适应不同尺寸的屏幕。建议使用支持库中的类(android.support.v4.app.*)来实现,可以通过升级项目的支持库从而使用到Fragment的最新的API特性

如何使用Fragment管理用户界面?

  步骤一:在AndroidStudio中添加依赖关系,这是因为要使用支持库就必须在项目中将其列入依赖关系。具体操作略!

  步骤二:创建CrimeActivity去继承FragmentActivity,因为FragmentActivity知道如何去管理Fragment。

  Activity托管Fragment有两种方式:在Activity布局中添加(但是不够灵活),在Activity代码中添加(灵活性高,通常采用这种方式)。

  步骤三:在CrimeActivity的布局文件中为Fragment安排位置,通常采用FrameLayout容器视图。xml文件代码如下:        

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

 

 

  步骤四:新建一个名为fragment_crime的xml文件,添加控件什么的。这就是CrimeFragment的布局文件

  步骤五:新建一个UIfragment类(继承Fragment),这就需要用到Fragment的生命周期相关的内容了。此类是利用onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)来实例化Fragment视图的布局,

      将实例化的View返回给托管Avtivity,也就是CrimeActivity。这个过程将Fragment和Activity建立起了联系。还将Fragment和它的xml布局文件建立起了联系。代码如下:

      

public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_crime,container,false);
    return v;
}

步骤六:必须是在Fragment中关联组件,并添加响应。


步骤七:FragmentManager负责将fragment的视图添加到Activity的视图结构中去。代码如下:

  
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);

if(fragment == null){
fragment = createFragment();
fm.beginTransaction().add(R.id.fragment_container,fragment).commit();
}

 

以上是关于UIfragment与fragmentManager的主要内容,如果未能解决你的问题,请参考以下文章

Android 11(仅限)FragmentManager 崩溃 - FragmentManager 已被销毁

android.support.v4.app.FragmentManager 还是 android.app.FragmentManager?

无法从 android.app.FragmentManager 转换为 android.support.v4.app.FragmentManager

android.support.v4.app.FragmentManager无法转换为android.app.FragmentManager

在 FragmentManager 中管理 BackStackEntries

从 Fragment (support.v4) 中获取 FragmentManager [重复]