Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加带有动画问题的片段(不替换)_Java_Android - Fatal编程技术网

Java 添加带有动画问题的片段(不替换)

Java 添加带有动画问题的片段(不替换),java,android,Java,Android,当我使用fragment(.add)方法并在它们之间移动时使用“淡入淡出”动画时。它给了我这个错误“java.lang.IllegalStateException:commit已经调用了”。我按照这个添加片段,然后使用动画 她是我的密码 final Fragment fragment1 = new HomeFragment(); final Fragment fragment2 = new LibraryFragment(); final Fragment fragment3 = new Ima

当我使用fragment(.add)方法并在它们之间移动时使用“淡入淡出”动画时。它给了我这个错误“java.lang.IllegalStateException:commit已经调用了”。我按照这个添加片段,然后使用动画

她是我的密码

final Fragment fragment1 = new HomeFragment();
final Fragment fragment2 = new LibraryFragment();
final Fragment fragment3 = new ImageFragment();
final FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment active = fragment1;

private void initializeBottomNavigation() {
    // animations
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
    ft.setCustomAnimations(android.R.anim.fade_out, android.R.anim.fade_in);

    // add fragments
    ft.add(R.id.fragment_layout, fragment3, "3").hide(fragment3).commit();
    ft.add(R.id.fragment_layout, fragment2, "2").hide(fragment2).commit();
    ft.add(R.id.fragment_layout,fragment1, "1").commit();

    // show and hid them when click on BottomNav items
    BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
    navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.home_item:
                    ft.hide(active).show(fragment1).commit();
                    active = fragment1;
                    return true;

                case R.id.books_item:
                    ft.hide(active).show(fragment2).commit();
                    active = fragment2;
                    return true;

                case R.id.image_item:
                    ft.hide(active).show(fragment3).commit();
                    active = fragment3;
                    return true;
            }
            return false;
        }
    });
}

FragmentTransaction
是一次性使用的对象。您不应该在多个操作中重用它,而应该在每次需要更改某些片段时启动一个新事务

在您的情况下,这是:一次在初始化过程中,和一次在每个底部酒吧按下

首先,从顶部删除行
FragmentTransition ft=fm.beginTransaction()
,因为您不能重用该对象

然后更改如下功能,即每次按下按钮都创建一个新事务:

private void initializeBottomNavigation() {
    // first one transaction to add each Fragment
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.fragment_layout, fragment3, "3").hide(fragment3);
    ft.add(R.id.fragment_layout, fragment2, "2").hide(fragment2);
    ft.add(R.id.fragment_layout, fragment1, "1");
    // commit once! to finish the transaction
    ft.commit();

    // show and hide them when click on BottomNav items
    BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
    navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            // start a new transaction
            FragmentTransaction ft = fm.beginTransaction();
            // animations
            ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
            ft.setCustomAnimations(android.R.anim.fade_out, android.R.anim.fade_in);
            switch (item.getItemId()) {
                case R.id.home_item:
                    ft.hide(active).show(fragment1).commit();
                    active = fragment1;
                    return true;

                case R.id.books_item:
                    ft.hide(active).show(fragment2).commit();
                    active = fragment2;
                    return true;

                case R.id.image_item:
                    ft.hide(active).show(fragment3).commit();
                    active = fragment3;
                    return true;
            }
            return false;
        }
    });
}