Service与fragment之间的通信

问题描述 投票:0回答:1

我们如何在服务和片段之间通信/传递数据

我正在尝试创建一项服务,并且正在执行一些操作,我想根据通过服务执行的操作来更新我的片段用户界面状态,但我不知道该怎么做

android kotlin android-fragments service communication
1个回答
0
投票

您可以关注官方文档页面https://developer.android.com/guide/fragments/communicate#java

但基本上页面上有一个示例:

public class ListViewModel extends ViewModel {
private final MutableLiveData<Set<Filter>> filters = new MutableLiveData<>();

private final LiveData<List<Item>> originalList = ...;
private final LiveData<List<Item>> filteredList = ...;

public LiveData<List<Item>> getFilteredList() {
    return filteredList;
}

public LiveData<Set<Filter>> getFilters() {
    return filters;
}

public void addFilter(Filter filter) { ... }

public void removeFilter(Filter filter) { ... }
}

public class ListFragment extends Fragment {
private ListViewModel viewModel;

@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewModel = new ViewModelProvider(requireActivity()).get(ListViewModel.class);
    viewModel.getFilteredList().observe(getViewLifecycleOwner(), list -> {
        // Update the list UI.
    });
}
}

public class FilterFragment extends Fragment {
private ListViewModel viewModel;

@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    viewModel = new ViewModelProvider(requireActivity()).get(ListViewModel.class);
    viewModel.getFilters().observe(getViewLifecycleOwner(), set -> {
        // Update the selected filters UI.
    });
}

public void onFilterSelected(Filter filter) {
    viewModel.addFilter(filter);
}

public void onFilterDeselected(Filter filter) {
    viewModel.removeFilter(filter);
}
}

两个片段都使用其宿主活动作为 ViewModelProvider 的范围。因为片段使用相同的作用域,所以它们接收相同的 ViewModel 实例,这使它们能够来回通信。

© www.soinside.com 2019 - 2024. All rights reserved.