将数据从活动传递到viewPager片段的推荐方法

时间:2018-08-06 14:02:53

标签: android performance android-layout android-fragments android-viewpager

我有一个执行网络操作的活动,成功后,它需要将数据发送到view pager fragment

这是我的结构。

  

活动->主页片段-> ViewPager [Fragment#1,Fragment#2]

现在的问题是我可以将数据从Activity发送到Home Fragment,但是我无法将数据发送到View Pager Fragment,因为活动与其没有任何直接联系。

要解决此问题,我已将网络呼叫从活动转移到片段,一旦我收到service call的响应,便将数据从viewPager传递到Home Fragment片段。

这很好,可以给我想要的结果,但是如果这是正确的方法,我一点也不困惑。

或我可以使用其他一些推荐的方法,并将数据从活动传递到子片段,或查看Pager片段,这些参考不能直接用于活动。

1 个答案:

答案 0 :(得分:1)

我将研究新的Android体系结构组件,特别是ViewModelLiveDatahttps://developer.android.com/topic/libraries/architecture/viewmodel

  

ViewModel类旨在存储和管理与UI相关的数据   一种生命周期意识的方法。

您可以创建一个共享视图模型,该活动及其中的任何片段都可以访问该模型。

链接示例:

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.
        });
    }
}
  

请注意,两个片段在获取时都使用getActivity()   ViewModelProvider。结果,两个片段接收相同的   SharedViewModel实例,范围仅限于活动。

以您的示例为例,这避免了将数据从活动向下传递到片段然后是子片段的层次结构,它们都可以引用SharedViewModel