来自另一个片段时片段不显示以前的数据

Fragment not showing previous data when coming from another fragment

在我的 android activity 中,我使用了多个片段,我根据我的要求成功地切换了这些片段,但问题是当我将片段 1 切换到片段 2 并从片段切换回来时2 to Fragment 1, Fragment 1 not showing previous data Fragment 1 start from stretch, but I want to show previous data same as I was selected.

复制代码

这是我从片段 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();  

这是我从片段 2 (fragment_CustomerInfo) 返回片段 1 (fragment_search_customerProfile) 的代码:

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();

谁能解释一下我怎样才能保存我的片段数据?

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

您可以简单地保留片段的实例,因此在您的 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用的,不管你是回去还是第一次。

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