是否可以使用导航抽屉布局将包参数发送到所有片段?
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
});
}
}
我有一个导航抽屉,其中有十五个片段可以在它们之间切换,我希望这个片段之间存在一个公共数据,所以我只需要从数据库中提取一次并在我的所有片段中使用它,是有什么方法可以为我的所有导航片段发送一个 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
});
}
}