如何从活动到片段进行交流?

时间:2019-05-14 03:54:18

标签: android android-fragments kotlin

我了解使用interface是从FragmentActivity进行通信的一种常用方法。但是,从ActivityFragment进行交流的良好做法是什么?

在我的项目中,我的Activity使用Fragments托管了3个ViewPager。我的Activity当前正在从后端服务器侦听,每当我从后端服务器收到更新时,我都想以某种方式通知我的3 Fragments。我尝试实现interface方法,但是由于在片段中创建的片段是一个单独的类,而该类是{{1的子类, }}。

是否有比使用FragmentPagerAdapterinteraceActivity进行通信更好/更清洁的方式?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用ViewModel在片段之间进行通信,这是android的官方文档。 这是您可以阅读的链接。 Share data between fragments 这是一个博客,用于了解实时数据link

这是示例

public class SharedViewModel extends ViewModel {
    private final MutableLiveData<Item> selected = new MutableLiveData<Item>();

    public void select(Item item) {
        selected.setValue(item);
    }

    public LiveData<Item> getSelected() {
        return selected;
    }
}

public class MasterFragment extends Fragment {
    private SharedViewModel model;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -> {
            model.select(item);
        });
    }
}

public class DetailFragment extends Fragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getSelected().observe(this, { item ->
           // Update the UI.
        });
    }
}