Я использовал этот учебник, чтобы научиться передавать данные между фрагментами:
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);
}
});
В 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);
}
}
}
}