当前位置: 首页 > 面试题库 >

Android:再次删除()Fragment->add()new同一类的Fragment->不调用onCreateView和onActivityCreated吗?

裴浩歌
2023-03-14
问题内容

我正在用以下命令销毁以编程方式创建的片段:

getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.test)).commit();

像这样在xml文件中确定:

<LinearLayout
    android:id="@+id/test"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

</LinearLayout>

如果然后我在mainactivity中再次从同一类创建一个片段:

getSupportFragmentManager().beginTransaction()
            .add(R.id.result_bar, testinstance)
            .commit();

然后onCreate似乎不再被调用(该片段只是空的)。我在这里做错了什么?谢谢。


问题答案:

什么是FrameLayout

根据有关共用布局的Google文档以及LinearLayout,RelativeLayout和AbsoluteLayout有什么区别的答案?中,ViewGroup为s
LinearLayoutRelativeLayoutAbsoluteLayout (decrepated)
TableLayout等被允许显示的观点:

  1. LinearLayout:“一一显示视图”
  2. RelativeLayout:“显示与另一个视图有关的视图”
  3. TableLayout:“在表中显示视图”

FrameLayout通过 重叠 显示视图。通常用于 包含 布局:

“框架布局是Android开发人员用来组织视图控件的最简单,最有效的布局类型之一。与其他一些布局相比,它们的使用频率更低,原因仅在于它们通常仅用于显示一个视图或重叠的视图。框架布局通常用作容器布局,因为它通常只有一个子视图(通常是另一个布局,用于组织多个视图)。”

来源: FrameLayout
MobilTuts

“框架布局允许开发人员在框架布局中仅显示单个或多个UI元素,但是每个元素将基于屏幕的左上角放置,并且重叠的元素将重叠显示。”

来源: 绝对初学者的Android框架布局

好吧,为什么我需要这个Fragment呢?(与LinearLayout或 相比)

FrameLayout的Google文档说:

“ FrameLayout旨在挡住屏幕上的某个区域以显示单个项目。”

FrameLayout将托管一个 布局
,并且愿意这样做。其余ViewGroup的仅显示视图。你可以做一个Fragment在所有ViewGroup小号
(我测试了一下,这是一个惊喜对我来说) ,但它不会以适当的方式来做到这一点。这些FrameLayout是:

“ …当您要重叠视图时,通常选择的布局。”

如果您使用创建一个布局<fragment .../>,则您的片段将不会被另一个替换,因为它会显示出来,因此它的ID将“附加”在视图上。要替换片段,您需要对其进行托管:
“通过将片段封装在FrameLayout中,您可以仅替换细节”
(请参见此答案)。

然后,请记住FrameLayouts是空的,可以托管 布局Fragments(来自Google的Fragment
Documentation,它非常简单地说明了如何使用片段的事实),当它们在xml中声明时,它们必须具有一个附加的类(一个id),该类不能被替换。
这就是为什么我们需要一个 容器 来承载此片段并使活动视图 重叠

希望这会有所帮助。

注意:如果有人要编辑此答案,但由于无法解释或解释不正确,则可以由衷地进行。



 类似资料:
  • 我正在开发一个应用程序使用Android4.0IC和碎片。 考虑ICS4.0.3(API level 15)API的演示示例应用程序中的修改示例: }

  • 具体问题是调用自定义arrayadapter的getView方法失败。我使用一个片段来显示一个列表。生成列表的活动允许从微调器中选择人员。然后,我使用所选人员的id从DB中检索数据。我将这些数据打包到指定给ArrayList的自定义holder对象中。以下是创建片段事务的活动代码。 片段正确地获取绑定的数据。onCreate方法和onCreateView方法执行正确。以下是onCreateView

  • 问题内容: 我正在升级Android应用程序(1.6兼容性),该应用程序使用显示三个带有嵌套活动的不同选项卡。 当时,我使用技巧在选项卡中显示嵌套的活动,但是我对此方法感到非常不满意,因为处理某些功能确实很麻烦。 我听说过1.6版的Fragments API兼容性软件包,并且看起来非常适合我想做的事情(在带有过渡效果和内容的选项卡中显示嵌套视图/功能),但我无法使其与(这是为了与一起使用,但在兼容

  • 我试图通过按特定顺序调用的片段实现反向导航:

  • Fragment 组件提供了用于减少不必要嵌套的组件。组件能够在不额外创建 DOM 元素的情况下,在 render() 方法中返回多个元素。更早的 Rax 版本已经对数组的返回进行了支持,Rax 1.0 采用了更为标准的方式。 示例 <Fragment> <header>A heading</header> <footer>A footer</footer> </Fragment> //

  • 根据Android指南,http://developer.android.com/training/basics/fragments/communicating.html一个片段应该通过宿主Activity向另一个片段发送数据。我想知道这有什么原因。因为在我的代码中,我放置了一个变量来保存指向另一个片段的指针,并在onActivityCreated中赋值 后来,如果我想为FragmentType2