Android,如何从fragment获取activity中的状态

我正在遵循此应用程序的一个活动/多个片段方法。从图片中,您可以看到有一个主要活动,带有带有排序首选项的工具栏微调器。用户选择的选项将决定 recyclerView 如何对其自身进行排序。


我的问题是,片段在保持关注点分离的同时获取有关用户在工具栏微调器中选择的内容的信息的最佳方法是什么?


以下是活动如何获取微调器中的用户事件通知的方式:


@Override

public void onSortMenuItemClicked(MenuItem id) {

    mFragmentScreenNavigator.swapToJobRequestFragment(mUserProfilePersistence.getUserProfile().getEmail());

}

一旦用户选择了排序首选项,我就有一个导航器可以导航到 recyclerView 片段


基本上,我想要实现的不是“告诉”片段排序首选项是什么,有没有办法让片段“出去”并获取该信息?谢谢

https://img1.mukewang.com/64c37b660001490805411070.jpg

https://img3.mukewang.com/64c37b7100019fa410210854.jpg

不负相思意
浏览 127回答 1
1回答

潇湘沐

您可以用于ViewModelActivity 和 Fragment 之间通信的目的。为了使其正常工作,您还可以使用LiveData观察变量更改并在发生变化时进行更新。1)不要忘记添加相应的依赖项。implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'2) 创建一个继承自 的类ViewModel。在这个类中,我们有MutableLiveData允许 up 使用的对象LiveData。可能最好使用Integertype,这样你就可以像 id 一样更改它。public class ExampleViewModel extends ViewModel {    private MutableLiveData<String> sortingMode = new MutableLiveData<>();    public LiveData<String> getSortingMode() {        return sortingMode;    }    public void setSortingMode(String mode) {        sortingMode.postValue(mode);    }}2)获取对您的内部活动的引用ViewModel,以便您可以从(我相信)您的选项菜单中使用排序模式更新值ExampleViewModel viewModel = ViewModelProviders.of(this).get(ExampleViewModel.class);3)要更改该值,您只需调用您的ViewModel方法,该方法将根据项目/ ID/标题(无论听起来对您更好)来更新变量值。viewModel.setSortingMode("Example Mode");ViewModel4)获取Fragment内的ActivityExampleViewModel viewModel = ViewModelProviders.of(getActivity()).get(ExampleViewModel.class);5)订阅LiveData对象观察值变化viewModel.getSortingMode().observe(this, new Observer<String>() {    @Override    public void onChanged(String s) {        // Provide needed logic depending on sorting preferences    }});这只是它如何工作的一个小例子。架构组件非常强大,所以我强烈建议您阅读它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java