【问题标题】:Access view in a fragment from activity in Android从Android中的活动访问片段中的视图
【发布时间】:2015-08-15 23:14:54
【问题描述】:

这似乎是一个奇怪的问题,但对我来说并不清楚。 我创建了一个带有 activty 和 Fragment 的简单 Android 项目。 第一个问题:片段是在Activity的OnCreate事件中用setContentView创建的,对吗? 现在,为什么我可以设置位于片段布局中的 TextView 的文本(例如)?

您能否澄清与 Activity 片段的链接? 谢谢!

罗伯托

【问题讨论】:

    标签: android android-fragments android-activity


    【解决方案1】:

    片段是在Activity的OnCreate事件中用setContentView创建的,对吗?

    我们无法知道,因为我们没有您的代码。通过以下两种方式之一将片段添加到活动中:

    1. 膨胀包含<fragment>标签的布局,例如通过setContentView()

    2. 提交FragmentTransaction,您可以使用add()replace() 将片段放入活动中

    为什么我可以设置位于片段布局中的 TextView 的文本(例如)?

    活动可以访问其整个视图层次结构。这些单独的视图来自FragmentListAdapterRecyclerView.Adapter 或其他任何地方都无关紧要。

    现在,让 Activity 操作片段创建的视图并不是一个好主意——“关注点分离”表示片段应该管理自己的视图。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题...

      您有一个包含 java 文件和 xml 文件的活动。然后你有一个片段,它有自己的 java 文件和 xml 文件。

      当您的活动开始时,它会像这样打开指定的 xml 文件

      setContentView(R.layout.activity_main);
      

      现在,如果您想使用片段,您应该在 Activity 的 xml 中有一个框架布局作为片段容器。这是一个托管片段的活动示例

      <android.support.v4.widget.DrawerLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/drawer"
      android:fitsSystemWindows="true">
      
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <include
              android:id="@+id/tool_bar"
              layout="@layout/tool_bar">
          </include>
      
          <FrameLayout
              android:id="@+id/fragment_container"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
      
          </FrameLayout>
      
      </LinearLayout>
      
      <android.support.design.widget.NavigationView
          android:id="@+id/navigation_view"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:layout_gravity="start"
          app:headerLayout="@layout/drawer_header"
          app:menu="@menu/drawer"/>
      

      所以它基本上包含三个元素:工具栏、导航抽屉和片段容器。

      现在要了解的重要一点是,该 xml 中该容器之外的任何内容都将由我调用的所有片段共享。因此,我为该活动调用的任何片段默认情况下也将具有工具栏和导航抽屉。

      在activity的java文件中你可以像这样调用一个fragment(创建时不调用fragment。你必须自己调用)

      Fragment firstFragment = new MainFragment();
      FragmentManager fragmentManager = getSupportFragmentManager();
      fragmentManager.beginTransaction().add(R.id.fragment_container, firstFragment).commit();
      

      这样你的片段就会运行并显示出来。

      片段被用来分割用户界面代码。因此,您可以拥有 5 个活动和 15 个片段,而不是在一个程序中有 20 个活动。您可以重复使用片段并替换它们。例如,我正在处理的当前项目有一个将近 800 行长的主要活动。我不想每次切换屏幕时都再次运行所有这些代码行,所以我制作了一堆片段。主要活动仍然处于活动状态,片段也是如此,但我可以在片段之间切换,而不是启动和重新启动一堆活动

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        相关资源
        最近更新 更多