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

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

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

【问题讨论】:

    标签: android xml layout fragment


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多