Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Android Fragments - Fatal编程技术网

Java 如何正确处理底部导航视图中的片段切换

Java 如何正确处理底部导航视图中的片段切换,java,android,android-fragments,Java,Android,Android Fragments,我使用Android示例活动创建了一个底部导航视图,但从外观上看,我认为它没有正确实现,因为我注意到了两件事 每次在片段之间切换时,片段都会重新创建 有时,当你切换碎片太快时,应用程序会因为这个错误而崩溃 java.lang.IllegalStateException:尚未附加片段事务片段{6b18628}(462273e7-ed16-4e50-93f2-935432434a9b)}。 我在这里的问题是,有没有办法防止每次都出现碎片 我如何在2中处理这个错误 MainACtivity.Java

我使用Android示例活动创建了一个底部导航视图,但从外观上看,我认为它没有正确实现,因为我注意到了两件事

  • 每次在片段之间切换时,片段都会重新创建

  • 有时,当你切换碎片太快时,应用程序会因为这个错误而崩溃

    java.lang.IllegalStateException:尚未附加片段事务片段{6b18628}(462273e7-ed16-4e50-93f2-935432434a9b)}。

  • 我在这里的问题是,有没有办法防止每次都出现碎片

    我如何在2中处理这个错误

    MainACtivity.Java

    public class MainActivity extends AppCompatActivity {
    
        private static BottomNavigationView navView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            navView = findViewById(R.id.nav_view);
            addBadgeView();
            AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                    R.id.navigation_home, R.id.navigation_transactions, R.id.navigation_wallets, R.id.navigation_account)
                    .build();
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    //        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
            NavigationUI.setupWithNavController(navView, navController);
        }
    
        private void addBadgeView() {
            navView = findViewById(R.id.nav_view);
            navView.getOrCreateBadge(R.id.navigation_transactions); // Show badge
        }
    
    }
    
    Fragment.java(这是我在oncreate中实例化片段的方式)


    如果使用导航组件,则将重新创建片段。没有办法解决这个问题好吧,我明白了,我会尝试使用另一种方法,谢谢你,你推荐最好的方法是什么?自行处理片段管理器和片段事务,但它太难了。也许我可以给你举个例子。另一种方法是使用共享视图模型并继续使用导航组件。当片段重新创建时保留数据,您不需要再次调用API。请给我举个例子,如果您使用导航组件,片段将重新创建。没有办法解决这个问题好吧,我明白了,我会尝试使用另一种方法,谢谢你,你推荐最好的方法是什么?自行处理片段管理器和片段事务,但它太难了。也许我可以给你举个例子。另一种方法是使用共享视图模型并继续使用导航组件。当片段重新创建时保留数据,您不需要再次调用API。请给我举个例子
    public class HomeFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
    
        private static String TAG = HomeFragment.class.getSimpleName();
    
        private HomeViewModel homeViewModel;
    
        public HomeFragment() {
        }
    
        public View onCreateView(@NonNull LayoutInflater inflater,
                                 ViewGroup container, Bundle savedInstanceState) {
            homeViewModel =
                    ViewModelProviders.of(this).get(HomeViewModel.class);
              final View root = inflater.inflate(R.layout.fragment_home, container, false);
            return root;
        }