为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2023-07-28 16:24:37
我正在遵循此应用程序的一个活动/多个片段方法。从图片中,您可以看到有一个主要活动,带有带有排序首选项的工具栏微调器。用户选择的选项将决定 recyclerView 如何对其自身进行排序。我的问题是,片段在保持关注点分离的同时获取有关用户在工具栏微调器中选择的内容的信息的最佳方法是什么?以下是活动如何获取微调器中的用户事件通知的方式:@Overridepublic void onSortMenuItemClicked(MenuItem id) {    mFragmentScreenNavigator.swapToJobRequestFragment(mUserProfilePersistence.getUserProfile().getEmail());}一旦用户选择了排序首选项,我就有一个导航器可以导航到 recyclerView 片段基本上,我想要实现的不是“告诉”片段排序首选项是什么,有没有办法让片段“出去”并获取该信息?谢谢
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

您可以用于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内的Activity


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

    }

});

这只是它如何工作的一个小例子。架构组件非常强大,所以我强烈建议您阅读它。

查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信