片段在来自另一个片段时未显示先前的数据

时间:2017-12-07 08:22:59

标签: android android-layout android-fragments android-fragmentactivity

在我的android活动中,我使用多个片段,我根据我的要求成功切换这些片段,但问题是当我将片段1切换到片段2并从片段2切换回片段1时,片段1未显示先前数据片段1从拉伸开始,但我想显示与我选择的相同的先前数据。

这是我的片段1(fragment_search_customerProfile)到片段2(fragment_CustomerInfo)的代码:

FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.filterFram, new fragment_Search());

FrameLayout layout = (FrameLayout) rootView.findViewById(R.id.cpFrame);
layout.removeAllViewsInLayout();

transaction.remove(new fragment_search_customerProfile()).commit();  

这是我的片段1(fragment_search_customerProfile)fromFragment 2(fragment_CustomerInfo)的代码:

FragmentManager manager = getActivity().getSupportFragmentManager();


FragmentTransaction transaction = manager.beginTransaction();

Log.d("fragment_Search", fromSearch + "");
transaction.replace(R.id.custIndoFram, new fragment_search_customerProfile());

FrameLayout layout = (FrameLayout) rootView.findViewById(R.id.custIndoFram);

layout.removeAllViewsInLayout();

transaction.remove(new fragment_CustomerInfo()).commit();

任何人都可以解释我如何保存我的片段数据?

3 个答案:

答案 0 :(得分:1)

而不是transaction.replace(R.id.filterFram, new fragment_Search()); 您可以使用transaction.add添加片段,同时拥有第一个 transaction.add(R.id.filterFram, new fragment_Search()); transaction.addToBackStack(null); 的数据 从片段2中,您可以使用.show而不是replace来显示第一个片段 并从第一个隐藏片段二。 transaction.show(getSupportFragmentManager().findFragmentByTag("firstFragmentTag")).commit();

答案 1 :(得分:0)

您可以简单地保留片段的实例,因此在您的Activity中,您将拥有这样的字段。

private Fragment fragment1;
private Fragment fragment2;

现在你可以使用性感的replace()选项,

添加Fragment1

if (fragment1 == null) {
    fragment1 = new fragment_Search();
}
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.filterFram, fragment1);

Fragment2

相同

您可以在Fragment本身保存片段的状态(它检索的数据),并在您检查的onViewCreated()中,如果状态不是null,则更新立即观点。

class Fragment1 extends Fragment {
    private State state;

    public void onViewCreated(View v) {
        if (state != null) {
            // Update UI here
        }
    }

}

更新

使用您自己的代码

private Fragment fragment1; // This is a field outside of below method


if (fragment1 == null) {
    fragment1 = new fragment_Search();
}
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.filterFram, fragment1).commit();

FrameLayout layout = (FrameLayout) rootView.findViewById(R.id.cpFrame);
layout.removeAllViewsInLayout();

转到fragment2应该是相同的,这段代码用于转到Fragment1和Fragment2,如果你要回去或第一次也不重要。

答案 2 :(得分:0)

您必须添加片段而不是删除或替换