【发布时间】:2018-11-18 17:24:31
【问题描述】:
我已经使用本教程学习了如何在片段之间传递数据:
https://www.journaldev.com/14207/android-passing-data-between-fragments
如果我有两个片段,它会完美运行。但是我的应用程序需要更多 (7) 个片段。片段是选项卡布局上的选项卡。当我在彼此相邻的两个选项卡之间来回切换时,这很好。但是,一旦我从 tab0 切换到更远的选项卡(tab5),发送消息,然后在 tab0 上检查它,EditText 就会恢复它的原始值。
当我更改 EditText 的值时,我会更改选项卡标题的值。并且它会正确更新。 (我从 tab0 转到 tab5,发送消息,tab0 的标题更改,因此收到消息。)但是当我返回 tab0 时,它变回原来的值(也是标签标题,但这是正确的工作) .
就像发生了所需的更改,但是当我切换回来时,它又恢复了原始值。它与销毁和保存实例有关吗?如何摆脱这个?
在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);
}
});
在实现STab.SendData的MainActivity.java中:
@Override
public void setStructureBonusTileSpinner(int position, int currentTabNumber) {
for(int i = 0; i < mSectionsPagerAdapter.getCount(); i++){
if(i != currentTabNumber) {
String tag = "android:switcher:" + R.id.container + ":" + i;
STab f = (STab) getSupportFragmentManager().findFragmentByTag(tag);
if(f != null){
f.setStructureBonusTileSpinner(position);
}
}
}
}
【问题讨论】:
-
请出示一些代码。
-
不会给出答案,因为它只是一个盲拍,但如果它适用于 2 个片段,并且它没有更多片段,它们可能只是在开关上被刷新,试试这个: mViewPager.setOffscreenPageLimit(fragmentCount - 1)
-
@JMedinilla 太好了,这确实有效。谢谢!请把它放在答案中,然后我可以标记它。
标签: android fragment android-tablayout