在android中使用fragment和frameLayout有啥区别?两者可以互换使用吗?

Posted

技术标签:

【中文标题】在android中使用fragment和frameLayout有啥区别?两者可以互换使用吗?【英文标题】:What can be the difference of using a fragment and frameLayout in android? Can both be used interchangeably?在android中使用fragment和frameLayout有什么区别?两者可以互换使用吗? 【发布时间】:2017-09-14 10:49:54 【问题描述】:

我看到了一种在片段的情况下使用 frameLayout 的方法。最终目标是拥有多个片段。

【问题讨论】:

【参考方案1】:

为了在屏幕上立即显示单个 Fragment,是的,您可以互换使用 Fragment 或 FrameLayout。

单个片段,方法 1

通过片段标签显示片段在 XML 中如下所示:

<fragment class="com.example.ExampleFragment"
        android:id="@+id/details" android:layout_weight="1"
        android:layout_ android:layout_ />

单个片段,方法 2

通过 FrameLayout 显示片段在 XML 中如下所示:

<FrameLayout android:id="@+id/details" android:layout_weight="1"
            android:layout_ android:layout_ />

后面是这样的Java代码:

Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.details, newFragment);
transaction.addToBackStack(null);
transaction.commit();

多个片段

然后方法 2 支持通过运行更多 Java 代码来更改稍后显示的片段,以更改之后的片段:

Fragment secondFragment = new SecondExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.details, secondFragment);
transaction.addToBackStack(null);
transaction.commit();

因此 FrameLayout 为您提供了额外的能力,而不是使用片段标签。

【讨论】:

嗯,这解决了我的疑问。今天,我在 XML 文件中使用了 ,然后还在 java 文件中使用了 fragmentManager 部分。用户界面中有重复,现在我明白为什么了。【参考方案2】:

framelayout、Relative View 和其他一些表示 android 中的视图,并且是从 viewgroup 扩展而来的。

片段是一个对象,用于表示用户界面的一部分,通常托管在活动中。

片段有一个视图组,您可以分配一个 XML 布局。如果您希望在片段中表示视图组的布局,您可以在 XML 中指定可以是框架布局的视图组。

片段和框架布局不能互换使用。

话虽如此,您可以在不使用片段的情况下创建 Android 应用程序,而只需使用视图组。

【讨论】:

以上是关于在android中使用fragment和frameLayout有啥区别?两者可以互换使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Fragment中获取Activity的方法进行fragment的切换

在android中使用fragment和frameLayout有啥区别?两者可以互换使用吗?

Android中Fragment和ViewPager那点事儿

android fragment和activity的区别

如何在 Android 的 Fragment 中使用 setUserVisibleHint

Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法