Android 如何使用相同的数据异步更新所有片段?
这就是我要做的 我在MainActivity中托管了2个片段 片段1只有几个小部件需要更新。 片段2有一个recycler视图来显示项目列表 我首先获取数据类的一个实例并调用其fetchData方法 fetchData()方法与本地数据库通信,首先查看我的数据是否已存储在本地数据库中 如果它被存储,那么它只返回该数据,片段2中的recycler视图只显示该数据 但是,如果本地数据库中的数据不存在(这是一个异步调用),则当我必须从internet获取新数据时,问题就会出现。(我用来调用web API的库是Volly)Android 如何使用相同的数据异步更新所有片段?,android,android-fragments,kotlin,android-recyclerview,Android,Android Fragments,Kotlin,Android Recyclerview,这就是我要做的 我在MainActivity中托管了2个片段 片段1只有几个小部件需要更新。 片段2有一个recycler视图来显示项目列表 我首先获取数据类的一个实例并调用其fetchData方法 fetchData()方法与本地数据库通信,首先查看我的数据是否已存储在本地数据库中 如果它被存储,那么它只返回该数据,片段2中的recycler视图只显示该数据 但是,如果本地数据库中的数据不存在(这是一个异步调用),则当我必须从internet获取新数据时,问题就会出现。(我用来调用web AP
现在,我不知道如何告诉片段1和片段2在数据库更新后使用更新的数据?架构组件提供了一种连接活动和其中片段的方便方法
final MyModel viewModel = ViewModelProviders.of(getActivity()).get(MyModel.class);
private MutableLiveData mCurrentData;
公共可变LiveData getCurrentData(){
if(mCurrentName==null){
mCurrentData=new MutableLiveData();
}
返回mCurrentData;
}
公共void updateData(){
getCurrentData().setValue(myDataClass.getNewData());
}
// Get the ViewModel.
mModel = ViewModelProviders.of(getActivity()).get(MyModel.class);
// Create the observer which updates the UI.
final Observer<String> myObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newData) {
// do something with the new data
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentData().observe(this, myObserver);
//获取视图模型。
mModel=ViewModelProviders.of(getActivity()).get(MyModel.class);
//创建更新UI的观察者。
最终观察者myObserver=新观察者(){
@凌驾
公共void onChanged(@Nullable final String newData){
//对新数据做些什么
}
};
//观察LiveData,作为LifecycleOwner和observer传入此活动。
mModel.getCurrentData().observe(这是myObserver);
myObserver
实例中获得相同的更新
您可以找到更详细的指南。请简要说明您的问题。您的要求是,如果不从internet更新,则从本地调用,否则从internet调用。对吗..?好的,然后您希望在从数据库显示之后,首先将数据存储在数据库中,不是直接从互联网上。好的,那么你应该使用时间戳。当从互联网上更新数据时,你的时间和互联网数据时间不匹配,所以你应该更新。看起来你面临的问题比你感觉的要大。通常,您需要组织代码来处理所描述的逻辑。这与具体的方法或领域无关。这是关于应用程序的结构。我真的向你推荐这篇文章:它可能看起来有点势不可挡。在这种情况下,请查看该文章中的链接以获得更好的理解。
// Get the ViewModel.
mModel = ViewModelProviders.of(getActivity()).get(MyModel.class);
// Create the observer which updates the UI.
final Observer<String> myObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newData) {
// do something with the new data
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentData().observe(this, myObserver);