我已使用本教程来学习如何在片段之间传递数据:
https://www.journaldev.com/14207/android-passing-data-between-fragments
如果我有两个片段,它会完美地工作。但是我的应用程序需要更多(7)片段。片段是选项卡布局上的选项卡。当我在彼此相邻的两个选项卡之间来回切换时,感觉很好。但是,一旦我从tab0切换到更远的标签(tab5),发送消息,然后在tab0上进行检查,EditText便恢复为原始值。
当我更改EditText的值时,我也会更改选项卡标题的值。并且它会正确更新。 (我从tab0转到tab5,发送消息,tab0的标题更改了,所以收到了消息。)但是当我回到tab0时,它又变回了它的原始值(也是它的Tab标题,但这是正确的工作方式) 。
这就像发生了所需的更改一样,但是当我切换回去时,它又恢复了原始值。它与destroying和savedInstances有关吗?如何摆脱这个?
在STab.java
(标签的代码)中:
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
SD = (SendData) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException("Error in retrieving data. Please try again");
}
}
interface SendData {
void setStructureBonusTileSpinner(int position, int currentTabNumber);
}
protected void setStructureBonusTileSpinner(int position){
spinnerStructureBonusTile.setSelection(position);
}
也在STab.java
中的onViewCreated方法中:
spinnerStructureBonusTile.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
SD.setStructureBonusTileSpinner(spinnerStructureBonusTile.getSelectedItemPosition(), tabNumber);
}
});
在实现MainActivity.java
的{{1}}中:
STab.SendData
答案 0 :(得分:1)
如果您将数据从片段A传输到片段B,请执行以下操作。
1。片段A->基础活动->片段B(不推荐) 您可以使用父活动来传输数据。 2.使用Bundle对象。
public static Fragment newInstance(String param1, String param2) {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
答案 1 :(得分:0)
默认情况下,屏幕外页限制设置为1,因此,您认为有效的两个片段之间相邻的片段将从适配器中重新创建。
如果您不打算执行繁重的任务,只需更改该限制就足够了。
mViewPager.setOffScreenPageLimit(fragmentCount - 1)
PD:作为一个提示,您应该永远不要超过3个标签,如果您可以考虑一个更好的方法而不是这个,那会更好。
PD2:您还应该发布相关代码