java.lang.illegalargumentexception android.support.v4.app.fragmentmanagerimpl.movetostate - PullRequest
0 голосов
/ 03 июля 2019

У меня есть кодовая база из нескольких фрагментов, помещенных в действие, и включает в себя множество транзакций, таких как замена и удаление. Я не совсем уверен, из-за какого фрагмента происходит сбой этой общей ошибки. Было бы замечательно, если есть какое-либо решение этой проблемы?

ОШИБКА:

java.lang.IllegalArgumentException: 
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1413)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1740)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1809)
  at android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3217)
  at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop (FragmentManager.java:3198)
  at android.support.v4.app.FragmentController.dispatchReallyStop (FragmentController.java:240)
  at android.support.v4.app.FragmentActivity.onReallyStop (FragmentActivity.java:677)
  at android.support.v4.app.FragmentActivity.doReallyStop (FragmentActivity.java:656)
  at android.support.v4.app.FragmentActivity$1.handleMessage (FragmentActivity.java:87)
  at android.os.Handler.dispatchMessage (Handler.java:108)
  at android.os.Looper.loop (Looper.java:206)
  at android.app.ActivityThread.main (ActivityThread.java:6784)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:852)

Невозможно что-либо проверить или попробовать, так как не может воспроизвести.

MainActivity extends BaseActivity {

@Override
public void pushFragment(BaseFragment fragment) {

        if (isFinishing() || fragment == null) {
            return;
        }
        try {
            super.pushFragment(fragment);
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (fragment instanceof FragmentTestOne) {
                findViewById(R.id.content_test_one).setVisibility(View.VISIBLE);
                transaction.replace(R.id.content_channel_epg, fragment);
            } else if (fragment instanceof FragmentTestTwo) {
findViewById(R.id.content_test_two).setVisibility(View.VISIBLE);
                transaction.replace(R.id.content_test_two, fragment);
            } else {            
                transaction.add(R.id.content_test_three, fragment);
            }
            transaction.addToBackStack(null);
            transaction.commitAllowingStateLoss();
        } catch (Throwable e) {
            e.printStackTrace();
        }
}

}

BaseActivity extends AppCompatActivity{

pushFragment(BaseFragment fragment){
}

}

public FragmentTestOne extends BaseFragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_test_one, container, false);
        readBundleValues(getArguments());
return rootView;
   }
// Other part of implementation goes here...
}

public FragmentTestTwo extends BaseFragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_test_two, container, false);
        readBundleValues(getArguments());
return rootView;
   }
// Other part of implementation goes here...
}

public BaseFragment extends Fragment{
}

Ожидается разрешение, которое обеспечит по крайней мере воспроизводимый сценарий из моего кода. Или исправить будет наиболее ценно. Заранее спасибо за помощь.

...