У меня эта проблема в Android. Рассмотрим три фрагмента: A
, B
, C
. C
можно назвать от A
или от B
. Нужно ли вообще знать, из какого фрагмента был вызван фрагмент, C
?Как узнать, какой фрагмент называется другим фрагментом?
Отредактированные
Ok ребята я собираюсь объяснить, что я пытаюсь сделать. Предположим, у меня есть этот вызов: A называет B, B называет C.
Когда я нажимаю кнопку «Назад» на «C», я добираюсь до B, это прекрасно. Но когда я снова нажмите кнопку назад, он принимает меня к С, вместо А.
Это мой код:
@Override
public void onBackPressed() {
//this is the current fragment
Fragment fragmentActual = this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);
String fragmentTag = fragmentoActual.getTag().toString();
//If I press the back button in C:
if(fragmentTag.equals("TAG C")){
Fragment removefragment = this.getSupportFragmentManager().findFragmentByTag("TAG B");
Fragment fragmentClient = this.getSupportFragmentManager().findFragmentByTag("TAG C");
//If Im NOT passing arguments to B, I know this is a new form
if(removefragment.getArguments()== null){
//I always pass arguments to fragment C, but just in case:
if(fragmentClient.getArguments()!= null){
Bundle mArguments = fragmentClient.getArguments();
//FRAGMENT B
FragmentB fragmentB = new FragmentB();
fragment.setArguments(mArguments);
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.addToBackStack(null);
ft.replace(android.R.id.tabcontent,fragmentB,"TAG B");
ft.commit();
}
}else{
super.onBackPressed();
}
}else{
super.onBackPressed();
}
}
Теперь я собираюсь объяснить код. В основном, это то, что нужно заменить фрагмент B, когда вызывается фрагмент C. Я делаю это, потому что мне нужно передать аргументы фрагменту B. Но когда я делаю замену, «история» фрагмента B теряется, я имею в виду, когда я нажимаю кнопку в B, я не могу вернуться к фрагменту A (ЗДЕСЬ, ПОЧЕМУ Я ХОТЕЛ ЗНАТЬ, ЕСЛИ Я МОГУ ЗНАТЬ, КОТОРЫЕ ЗВОНИТ, КОТОРЫЕ).
В то время, когда я вызываю фрагмент B, я не передаю аргументы, потому что это пустая форма. Но когда я звоню на C, оставаясь в B, мне нужно передать аргументы фрагменту B (когда нажата кнопка «Назад»), поэтому он может отображать обновленную информацию.
Пожалуйста, если есть что-то непонятное, дайте мне знать, чтобы я мог лучше объяснить себя.
Отредактировано 2: У этой проблемы есть что-то с этим https://stackoverflow.com/questions/16703604/back-press-button-when-i-save-a-form-for-the-first-time-a-list-view-is-not-updat. Возможно, моя идея более ясна.
Вы ищете возможности 'introspection' для android. – fotanus
Можете ли вы рассказать мне больше об этом? – kiduxa
Фрагмент не должен требовать знать, какой другой фрагмент «называет» его. – Luksprog