Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 Android,如何从片段中获取活动中的状态_Java_Android - Fatal编程技术网

Java Android,如何从片段中获取活动中的状态

Java Android,如何从片段中获取活动中的状态,java,android,Java,Android,我遵循此应用程序的单活动/多片段方法。从图中,您可以看到有一个带有工具栏微调器的主活动,该微调器具有排序首选项。用户选择的选项将指示recyclerView如何自行排序 我的问题是,fragment在保持关注点分离的同时,获取有关用户在工具栏微调器中选择的内容的信息的最佳方法是什么 以下是如何在微调器中通知活动的用户事件: @Override public void onSortMenuItemClicked(MenuItem id) { mFragmentScreenNavigator

我遵循此应用程序的单活动/多片段方法。从图中,您可以看到有一个带有工具栏微调器的主活动,该微调器具有排序首选项。用户选择的选项将指示recyclerView如何自行排序

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

以下是如何在微调器中通知活动的用户事件:

@Override
public void onSortMenuItemClicked(MenuItem id) {
    mFragmentScreenNavigator.swapToJobRequestFragment(mUserProfilePersistence.getUserProfile().getEmail());
}
一旦用户选择了排序首选项,我就有了一个导航器,可以导航到recyclerView片段

基本上,我想要实现的不是“告诉”片段排序偏好是什么,是否有一种方法让片段“走出去”并获得该信息?多谢各位

您可以使用ViewModel实现活动和片段之间的通信。为了使其工作,您还可以使用LiveData观察变量的变化,并在发生变化时进行更新

1不要忘记添加相应的依赖项

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
2创建从ViewModel扩展的类。在这个类中,我们有一个MutableLiveData对象,它允许最多使用LiveData。可能最好使用整数类型,这样就可以像修改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);
    }
}
3要更改值,只需调用ViewModel方法,该方法将根据item/id/title更新变量的值,无论什么听起来更适合您

viewModel.setSortingMode("Example Mode");
4获取片段内部的活动视图模型

ExampleViewModel 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
    }
});
这只是它工作原理的一个小例子。体系结构组件非常强大,因此我强烈建议您阅读它

结果绿色部门是内部活动的碎片,他们都在观察:

您还可以查看有关Rx或事件处理程序的信息。
viewModel.getSortingMode().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        // Provide needed logic depending on sorting preferences
    }
});