在 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 导航组件