是否可以使用导航抽屉布局将包参数发送到所有片段?

Is possible send bundle args to ALL fragments using Navigation Drawer Layout?

我有一个导航抽屉,其中有十五个片段可以在它们之间切换,我希望这个片段之间存在一个公共数据,所以我只需要从数据库中提取一次并在我的所有片段中使用它,是有什么方法可以为我的所有导航片段发送一个 Bundle?

目前我只能发送到第一个fragment(最开始的那个,下面代码中的),我要发送到navigation view的所有fragment ... 我应该使用 SharedPreferences 吗?但数据总是在变化(每当应用程序打开时)。

NavigationView navigationView = findViewById(R.id.nav_view);
        mAppBarConfiguration = new AppBarConfiguration.Builder(R.id.nav_home, R.id.nav_cad_bov, R.id.nav_attBoi, R.id.nav_acomp,
                R.id.nav_manejo, R.id.nav_patology, R.id.nav_desp, R.id.nav_ven, R.id.nav_meus_anu,
                R.id.nav_meus_anun_ed, R.id.nav_cap, R.id.nav_comp, R.id.nav_tuto, R.id.nav_editInfo, R.id.nav_logout).setOpenableLayout(drawer)
                .build();
        Bundle bundle = new Bundle();
        bundle.putString("amount", "Katinguele"); // Send to start fragment, i need send to ALL fragments
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        navController.setGraph(R.navigation.mobile_navigation, bundle);

        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

您可以在所有片段中使用 sharedViewModel 来实现此目的。

public class SharedtViewModel extends ViewModel {
    private MutableLiveData<String> amount;

    public void init()
    {
        amount = new MutableLiveData<>();
    }

    public void setAmount(String amount)
    {
        amount.setValue(amount);
    }
   
    public LiveData<String> getAmount() {
        return amount;
    }
}

设置您 Activity 的金额值。

SharedViewModel viewModel = ViewModelProviders.of(this).get(SharedViewModel.class);
viewModel.setAmount(amount);

最后,在每个Fragment中,可以观察到如下:

public class FragmentA extends Fragment {
    public void onActivityCreated() {
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getAmount().observe(this, { amount ->
           // Anything here
        });
    }
}