【问题标题】:fragment_main and activity_main layouts in Android StudioAndroid Studio 中的 fragment_main 和 activity_main 布局
【发布时间】:2014-01-16 05:40:41
【问题描述】:

我对 Android Studio 生成的两个布局文件感到困惑。 (fragment_main.xml 和 activity_main.xml)

我使用activity_main.xml。要使用 activity_main.xml 我需要注释掉

if(savedInstanceState==null){...} //in onCreate(), Otherwise it will not display

然后我可以使用activity_main.xml。

谁能解释一下

  1. 何时使用 Fragment_main.xml

  2. 同时使用两种布局的优势。

  3. 如何正确使用它们。(如果我没有在上面注释掉它不会显示activity_main.xml,而是显示fragment_main布局。这意味着我需要在fragment_main.xml中创建界面。)

谢谢。

【问题讨论】:

  • activity_main.xml 用于手机,Fragment_main.xml 用于平板电脑。

标签: android android-layout android-studio


【解决方案1】:

以下是使用 Fragments(Fragmenting your Activities) 的好处:

  1. 多种模式支持:就像您的应用程序支持横向和纵向模式或平板设备一样。考虑一下你有一个列表视图,另一个是你的应用程序中的详细信息页面。您可以制作两个片段,一个带有列表视图,一个带有详细信息,而不是两个活动,并且可以在横向和平板设备中组合在一起,而不是为平板电脑制作另一个活动。看看平板电脑上的androidSettings屏幕。

  2. 自定义视图:在某些情况下,我们需要创建一些自定义视图,但自定义视图的问题是维护状态,因此如果它们适合您的需要,您可以使用片段.

  3. 应用导航:滑动抽屉导航处理。在您的设备中打开 Google Play 并检查滑动导航。如果您点击滑动导航栏中的任何可用选项,您将不会看到任何在点击项目时开始的活动。由于它们都是应用程序的顶部视图,因此在这种情况下,您可以拥有一个带有片段的 Activity 并在点击时更改它们。

  4. 重用视图:创建 Fragment 后,您可以在运行时在任何 Activity 中使用它们,并将它们附加到您的 Activity 中。

还有很多其他好处,一旦开始使用就会发现。

在安卓开发者空间上有一个很好的解释:

http://developer.android.com/guide/components/fragments.html

阅读并决定。

【讨论】:

  • 正如 Johan S 所说,当方向改变时,片段不会被杀死(如活动)。这意味着我们也不想考虑它们的状态。不是吗?
  • 是的,这取决于您的活动。实际上,片段对象是在活动类中实例化的,因此您可以在实例化对象之前检查savedInstanceState。您可以在OnCreate() 方法内的默认工作室项目中看到它。如果你这样做,状态将保持不变。
【解决方案2】:
  1. 我总是尝试在活动中使用片段,我希望我的活动尽可能小,所有重要的代码都包含在片段中。这是推荐的方式,请查看此link。

  2. 正如我所写,如果您的活动非常少,例如显示图像然后是的,当然,只使用一个活动,但片段还有很多其他好处。就像旋转一样,Activity 死了,但 Fragment 仍然活着!

  3. 我认为您并不真正理解片段的概念。上面的链接说明了这一点:

Fragment 表示 Activity 中的一种行为或用户界面的一部分。

如果您不想要您的片段,请检查 activity_main.xml 文件并删除片段引用,或者不要使用片段管理器添加它。但是您看起来很年轻,所以请阅读有关 Fragments 的信息,它们使 android 编程更容易接受。

【讨论】:

    【解决方案3】:

    使用一种布局总是更好。在这种情况下,我建议使用 activity_main.xml 并按照以下步骤删除 fragment_activity.xml:

    1.正常创建项目。

    2.将fragment_main.xml复制到activity_main.xml(内容)。然后删除fragment_main.xml

    3.在MainActivity.java中删除以下内容:

    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
    

    和

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
    
        public PlaceholderFragment() {
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 2015-10-17
      相关资源
      最近更新 更多