У меня есть ActivityA есть FragmentA. В FragmentA есть EditText, который, если сфокусирован, добавляет FragmentB (ниже). Трассировка стека начинается с onDestroy
в ActivityA, которая вызывает onFocusChange
, который срабатывает popBackStack
. isRemovingOrPartOfRemovalChain()
должен возвращать true в этот момент, но он иногда возвращает false, вызывая popBackStack
, следовательно исключение. Есть ли ошибка в этом методе?Не удается выполнить это действие после onSaveInstanceState (изменение фокуса EditText)
editText.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
FragmentManager fragmentManager = getChildFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_B);
if(fragment == null){
FragmentB fragmentB = FragmentB.newInstance();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_b, fragmentB, FRAGMENT_B);
fragmentExploreSearchListTransaction.addToBackStack(null);
fragmentExploreSearchListTransaction.commit();
}
else{
if(!isRemovingOrPartOfRemovalChain()){
getChildFragmentManager().popBackStack();
}
}
}
});
public boolean isRemovingOrPartOfRemovalChain(){
if(isRemoving()){
return true;
}
Fragment fragment = this.getParentFragment();
if(fragment != null){
if(((MainFragment) fragment).isRemovingOrPartOfRemovalChain()){
return true;
}
else{
return false;
}
}
else{
return(getActivity().isFinishing());
}
}
/**
* Return true if this fragment is currently being removed from its
* activity. This is <em>not</em> whether its activity is finishing, but
* rather whether it is in the process of being removed from its activity.
*/
final public boolean isRemoving() {
return mRemoving;
}
Не могли бы вы опубликовать реализацию метода isRemoving() '? –
@GeorgeD 'isRemoving()' находится в классе Fragment Android. Я добавил его в конец сообщения. – ono
Почему бы просто не пометить действие заднего стека, а затем использовать [findFragmentByTag()] (https://developer.android.com/reference/android/support/v4/app/FragmentManager.html#findFragmentByTag%28java.lang.String% 29)? Таким образом, вы можете быть на 100% уверенным, что фрагмент все еще находится в стеке. – CurlyCorvus