Cra sh после щелчка BottomNavigation, когда анимация все еще исчезает - PullRequest
0 голосов
/ 02 февраля 2020

У меня BottomNavigation и 4 фрагмента. Приложение вылетает после того, как я нажимаю на символы BottomNavigation, но только в том случае, если анимация (постепенное увеличение / уменьшение) все еще выполняется. Если я отключаю анимацию в моем коде, как показано: /setCustomAnimations(R.anim.fade_in, R.anim.fade_out). / все работает нормально, но без анимации, конечно. Я хотел бы сохранить анимацию. Как я могу решить эту проблему, пожалуйста?

Это мой код BottomNavigation:

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

BottomNavigationView bottomNavigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bottomNavigationView = findViewById(R.id.bottom_Navigation_View);

    bottomNavigationView.setOnNavigationItemSelectedListener(this);

    bottomNavigationView.setSelectedItemId(R.id.navigation_partOne);
}

partOne partOneFragment = new partOne();
partTwo partTwoFragment = new partTwo();
partThree partThreeFragment = new partThree();
partFour partFourFragment = new partFour();

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    switch (item.getItemId()){
        case R.id.navigation_partOne:
            getSupportFragmentManager().beginTransaction()./*setCustomAnimations(R.anim.fade_in, R.anim.fade_out).*/replace(R.id.container, partOneFragment).commit();
            return true;

        case R.id.navigation_partTwo:
            getSupportFragmentManager().beginTransaction()./*setCustomAnimations(R.anim.fade_in, R.anim.fade_out).*/replace(R.id.container, partTwoFragment).commit();
            return true;

        case R.id.navigation_partThree:
            getSupportFragmentManager().beginTransaction()./*setCustomAnimations(R.anim.fade_in, R.anim.fade_out).*/replace(R.id.container, partThreeFragment).commit();
            return true;

        case R.id.navigation_partFour:
            getSupportFragmentManager().beginTransaction()./*setCustomAnimations(R.anim.fade_in, R.anim.fade_out).*/replace(R.id.container, partFourFragment).commit();
            return true;
    }
    return false;
 }
}

Ради полноты, это мой fade_in. xml:

    <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="300"
        android:interpolator="@android:anim/accelerate_interpolator"/>
</set>

Ошибка в Logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.exerciseexample, PID: 17519
    java.lang.IllegalStateException: Restarter must be created only during owner's initialization stage
        at androidx.savedstate.SavedStateRegistryController.performRestore(SavedStateRegistryController.java:58)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2585)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:838)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5832)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

compileSdkVersion равно 29; соответствующая зависимость - implementation 'androidx.appcompat:appcompat:1.1.0': я уже пытался понизить эти версии.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 февраля 2020

Попробуйте добавить AddToBackStack (null) после setCustomAnimations () для каждого фрагмента.

  getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, 
 R.anim.fade_out).AddToBackStack(null).replace(R.id.container, 
  partOneFragment).commit();

Другое решение - попытка изменить версию библиотеки на androidx.appcompat: appcompat: 1.0.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...