在 Android 中使用具有多个布局的单个片段

Posted

技术标签:

【中文标题】在 Android 中使用具有多个布局的单个片段【英文标题】:Using a single fragment with multiple layout in Android 【发布时间】:2014-11-02 11:21:15 【问题描述】:

我想使用具有多个布局的单个片段(仅可以加载多个布局的单个片段类)。我有两个布局 xml 文件。根据运行时的情况,我必须在布局xml文件之间切换。实际上,该应用程序必须发布一个表格。如果用户必须填写表单,则必须显示带有调查表布局的片段,并且当用户单击提交按钮时,同一片段中的另一个布局必须可见,并显示结果。如果用户已经提交了表单,那么带有结果布局的片段必须是可见的。

有可能吗?如果不是,请提出任何其他可行的替代方案。

【问题讨论】:

【参考方案1】:

一种解决方案是您可以为Fragment 视图设置简单的FrameLayout。然后使用LayoutInflater对对应的view进行inflate,添加到FrameLayout。您可以通过移除现有视图并膨胀其他视图来切换布局。

代码应该是这样的:

private FrameLayout mContainer;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
    mContainer = (FrameLayout) inflater.inflate(R.layout.fragment_framelayout, null);

    onSubmittedStateChanged(SubmittedState.SUBMITTED); // OR SubmittedState.NOT_SUBMITTED

    return mContainer;


public void onSubmittedStateChanged(SubmittedState state) 
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mContainer.removeAllViews();

    switch (state) 
    case SubmittedState.SUBMITTED:
        inflater.inflate(R.layout.submitted, mContainer);
        break;
    case SubmittedState.NOT_SUBMITTED:
        inflater.inflate(R.layout.not_submitted, mContainer);
        break;
    

【讨论】:

我该怎么做,你能给我举个例子吗?我尝试使用布局充气器,但没有用。 我试过你的代码,但没有用。你能上传fragmen_framelayout、submitted和not_sumbitted布局的例子吗?实际上我是从一个活动中调用一个片段。而且活动本身也有布局。 fragment_framelayout 是在 xml 中定义的 FrameLayout,提交和未提交的布局是您自己在 xml 中的那些状态的布局。怎么没用? 我在一个活动中有一个按钮,当我按下它时,它会调用片段,并且应该通过 layoutinflater 加载其中一个布局。但问题是,活动中的按钮也已加载。当我必须决定在创建片段时加载哪个布局时,您的代码也可以工作。但我需要更改片段内的布局。当我在 no_sumbitted 布局中按下某个按钮时,它必须在 framgnet 中加载提交的布局。 由于提交的布局和未提交的布局都在同一个Fragment中,您可以调用onSubmittedStateChanged,它将删除未提交的布局并添加提交到Fragment。

以上是关于在 Android 中使用具有多个布局的单个片段的主要内容,如果未能解决你的问题,请参考以下文章

在 TabLayout 和 ViewPager2 中执行异步任务后更新具有相同布局的多个片段

具有相同布局的多个片段

如何保存底部导航片段的状态 - 具有单个导航图的 Android 导航组件

对 ViewPager 的多个选项卡布局使用单个片段类

是否有在单个活动中处理多个片段的 Android 设计模式?

恢复片段后android地图停止响应