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