如何获取/设置每个以编程方式生成的片段的数据

时间:2018-08-21 18:29:37

标签: java android android-fragments dynamically-generated

我对Android中以编程方式生成的片段有疑问。 现在,我正在创建有助于在健身房训练的应用程序。我想创建类似“实时训练”的内容-这意味着用户将要进行一些锻炼,每次锻炼都需要举起举重等。 我当时以为每次练习都是一个片段(并有自己的数据),但是现在我在考虑如何与父活动自动生成的片段进行通信,例如读取一些数据。 用户应能够在练习之间进行切换(因此,应为每个练习保存任何系列和体重 直到锻炼结束为止),但现在我正在为此寻找最佳解决方案,但我陷于:/。我以前从未做过这样的事情。

1 个答案:

答案 0 :(得分:0)

使用带有实时数据的Model View View Model Architecture来观察数据更改。

建筑组件为UI控制器提供ViewModel帮助器类,该类负责为UI准备数据。 ViewModel对象会在配置更改期间自动保留,以便它们保存的数据可立即用于下一个活动或片段实例。

查看模型

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

有关更多信息,请浏览MVVM体系结构的android开发人员文档

https://developer.android.com/topic/libraries/architecture/viewmodel