来自另一个片段时片段不显示以前的数据
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用的,不管你是回去还是第一次。
您必须添加片段而不是删除或替换
在我的 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用的,不管你是回去还是第一次。
您必须添加片段而不是删除或替换