我使用本教程学习了如何在片段之间传递数据:
https://www.journaldev.com/14207/android-passing-data-between-fragments
如果我有两个碎片的话,效果会很好。但是我的应用程序需要更多的片段。片段是表格布局上的选项卡。当我在相邻的两个标签之间来回切换时,这很好。但只要我从tab0切换到更远的选项卡(tab5),发送消息,然后在tab0上检查它,EditText就会返回它的原始值。
更改EditText的值时,会更改选项卡标题的值。并且它会正确更新(我从tab0转到tab5,发送消息,tab0的标题更改,因此消息被接收。)但当我返回到tab0时,它会更改回原始值(也是tab标题,但这是正确的工作方式)。
在里面
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);
}
也在
,在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
实现哪一个
STab.SendData
:
@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);
}
}
}
}