在我的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();
任何人都可以解释我如何保存我的片段数据?
答案 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)
您必须添加片段而不是删除或替换