如何防止实时日期在从另一个片段按下并在召回时重复
How to prevent Live date from duplication in on back pressed from another fragment and on recall
你好,关于视图模型和导航组件的实时数据,我有两个问题,第一个是当我从带有实时数据的片段 A 到片段 B,然后从 B 到 A,列表中的数据被复制,
另一个问题是我在创建和过滤数据的事件后在我的片段中调用 viewModel.loadList()
也被复制
这是我的视图模型
public class HomeViewModel extends ViewModel {
MutableLiveData<ArrayList<HomeResponseModel>> homeLiveData = new MutableLiveData<>();
ArrayList<HomeResponseModel> homeList = new ArrayList<>();
public MutableLiveData<ArrayList<HomeResponseModel>> geHomeList(HomeRequestModel homeRequestModel, Context context, ApiInterface apiInterface, LottieAnimationView lottieAnimationView) {
if (homeLiveData == null) {
homeLiveData = new MutableLiveData<ArrayList<HomeResponseModel>>();
loadHomeList(homeRequestModel);
}
return homeLiveData;
}
public void loadHomeList(HomeRequestModel homeRequestModel) {
Call<List<HomeResponseModel>> call = apiInterface.getHomeList(homeRequestModel, );
call.enqueue(new Callback<List<HomeResponseModel>>() {
@Override
public void onResponse(Call<List<HomeResponseModel>> call, Response<List<HomeResponseModel>> response) {
if (response.isSuccessful()) {
homeList.addAll(response.body());
homeLiveData.setValue(homeList);
}
}
@Override
public void onFailure(Call<List<HomeResponseModel>> call, Throwable t) {
}
});
}
我在 onCreateView
的观察员
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeResponseModels.addAll(homeResponse);
homeAdapter.notifyDataSetChanged();
}
});
}
我如何在过滤事件后回忆加载方法
viewModel.loadHomeList(homeRequestModel);
在添加新模型之前清除列表:
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeResponseModels.clear();
homeResponseModels.addAll(homeResponse);
homeAdapter.notifyDataSetChanged();
}
});
}
或者,甚至更好:
如果您的适配器拥有 List 或 HomeResponseModel,您可以创建一个方法来更新它:
public update(List<HomeResponseModel> homeResponse) {
this.homeResponseModels = homeResponse;
notifydatasetchanged();
}
然后更改观察方法来调用它:
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeAdapter.update(homeResponse);
}
});
}
除此之外,在 onResponse 回调的 loadHomeList 方法中的 ViewModel 中,您可以将接收到的数据分配给 liveData:
if (response.isSuccessful()) {
homeLiveData.setValue(response.body());
}
无需将其保存在 homeList
var 中,您可以删除该 var。否则,在将所有接收到的数据添加到其中之前执行 homeList.clear();
以避免重复。
你好,关于视图模型和导航组件的实时数据,我有两个问题,第一个是当我从带有实时数据的片段 A 到片段 B,然后从 B 到 A,列表中的数据被复制,
另一个问题是我在创建和过滤数据的事件后在我的片段中调用 viewModel.loadList()
也被复制
这是我的视图模型
public class HomeViewModel extends ViewModel {
MutableLiveData<ArrayList<HomeResponseModel>> homeLiveData = new MutableLiveData<>();
ArrayList<HomeResponseModel> homeList = new ArrayList<>();
public MutableLiveData<ArrayList<HomeResponseModel>> geHomeList(HomeRequestModel homeRequestModel, Context context, ApiInterface apiInterface, LottieAnimationView lottieAnimationView) {
if (homeLiveData == null) {
homeLiveData = new MutableLiveData<ArrayList<HomeResponseModel>>();
loadHomeList(homeRequestModel);
}
return homeLiveData;
}
public void loadHomeList(HomeRequestModel homeRequestModel) {
Call<List<HomeResponseModel>> call = apiInterface.getHomeList(homeRequestModel, );
call.enqueue(new Callback<List<HomeResponseModel>>() {
@Override
public void onResponse(Call<List<HomeResponseModel>> call, Response<List<HomeResponseModel>> response) {
if (response.isSuccessful()) {
homeList.addAll(response.body());
homeLiveData.setValue(homeList);
}
}
@Override
public void onFailure(Call<List<HomeResponseModel>> call, Throwable t) {
}
});
}
我在 onCreateView
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeResponseModels.addAll(homeResponse);
homeAdapter.notifyDataSetChanged();
}
});
}
我如何在过滤事件后回忆加载方法
viewModel.loadHomeList(homeRequestModel);
在添加新模型之前清除列表:
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeResponseModels.clear();
homeResponseModels.addAll(homeResponse);
homeAdapter.notifyDataSetChanged();
}
});
}
或者,甚至更好:
如果您的适配器拥有 List 或 HomeResponseModel,您可以创建一个方法来更新它:
public update(List<HomeResponseModel> homeResponse) {
this.homeResponseModels = homeResponse;
notifydatasetchanged();
}
然后更改观察方法来调用它:
viewModel.geHomeList(homeRequestModel).observe(getViewLifecycleOwner(), new Observer<ArrayList<HomeResponseModel>>() {
@Override
public void onChanged(ArrayList<HomeResponseModel> homeResponse) {
homeAdapter.update(homeResponse);
}
});
}
除此之外,在 onResponse 回调的 loadHomeList 方法中的 ViewModel 中,您可以将接收到的数据分配给 liveData:
if (response.isSuccessful()) {
homeLiveData.setValue(response.body());
}
无需将其保存在 homeList
var 中,您可以删除该 var。否则,在将所有接收到的数据添加到其中之前执行 homeList.clear();
以避免重复。