【问题标题】:Replacing a fragments View after onCreateView has run在 onCreateView 运行后替换片段视图
【发布时间】:2012-06-09 00:08:47
【问题描述】:

我有一个片段,它有两种查看模式,一种是编辑模式,一种是只读模式。用户可以通过在两种模式下都可用的微调器中选择的状态之间移动来切换模式。

创建片段时,我会根据我管理的对象的状态选择只读或编辑布局来扩展。一旦用户选择了新的状态,模式就可以从只读模式切换到编辑模式。发生这种情况时,我需要将编辑视图替换为只读视图。

如何替换片段中的现有视图?在 Activity 中,我会使用我想要使用的布局调用 setContentView。

我试过了:

  • 使视图无效,但不再调用 onCreateView。
  • 用片段事务替换片段,但不会改变布局。

注意:这是针对 Android 4.0 的,我不能使用兼容性库。

【问题讨论】:

  • 你为什么不使用两个片段?好像会轻松很多。只需使用 .replace 来交换它们。

标签: android android-layout android-fragments


【解决方案1】:

如果您想将所有内容保存在一个片段中:

我不完全确定您的布局看起来如何,但我想我只是将两个布局都放入 ViewFlipper 并根据选择的内容更改它的显示子项。

示例片段布局

<LinearLayout android:orientation="vertical" ..>
    <Spinner ../>

    <ViewFlipper android:id="@+id/flipper" ..>
        <ReadOnlyLayout />
        <EditLayout />
    </ViewFlipper>

</LinearLayout>

然后您可以简单地使用setDisplayedChild() 在两种布局之间切换,具体取决于您拥有的状态。

ViewFlipper vf = (ViewFlipper) getView().findViewById(R.id.flipper);
vf.setDisplayedChild(1);

请注意,子索引以 0 开头。

也可以使用两个独立的片段(根据 Barak 的建议)。我猜这只是一种设计选择。

【讨论】:

  • ViewFlipper 正是我所需要的...谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多