如何在Android中重用ViewModel的参数?我有一个回收查看器,其中填充了基于参数selectedDate
的数据库中的数据。我如何在片段中重用它,以这种方式刷新回收查看器?到目前为止,我正在使用ViewModelFactory
:
public class MyViewModelFactory implements ViewModelProvider.Factory {
private Application mApplication;
private String mParam;
public ShiftViewModelFactory(Application mApplication,String param) {
mApplication=mApplication;
mParam = param;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return (T) new MyViewModel(mParam);
}
}
我正在将其加载到onCreateView
中:
myViewModel = ViewModelProviders.of(this,new myViewModelFactory(selectedDate)).get(MyViewModel.class);
如何更改参数selectedDate
,然后刷新数据?
这是我的ViewModel
public class ShiftsViewModel extends ViewModel implements IShiftMapCallbacklistener {
private MutableLiveData<List<ShiftModel>> coworkerList;
private MutableLiveData<String> messageError;
private IShiftMapCallbacklistener coworkerInfoCallbacklistener;
public ShiftsViewModel() {
coworkerInfoCallbacklistener = this;
}
private void loadCoworkerList() {
final List<ShiftModel> tempList = new ArrayList<>();
DatabaseReference coworkerRef = FirebaseDatabase.getInstance()
.getReference(Common.MAP)
.child(Common.DATA)
.child(selectedDate);
coworkerRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull Datasnapshot datasnapshot) {
for (Datasnapshot itemsnapshot : datasnapshot.getchildren())
if (!itemsnapshot.child("Operator").getvalue().equals("")) {
ShiftModel model = itemsnapshot.getvalue(ShiftModel.class);
tempList.add(model);
}
coworkerInfoCallbacklistener.onCoworkerInfoLoadSuccess(tempList);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
coworkerInfoCallbacklistener.onCoworkerInfoLoadFailed(databaseError.getMessage());
}
});
}
public MutableLiveData<List<ShiftModel>> getcoworkerList() {
if (coworkerList == null){
coworkerList = new MutableLiveData<>();
messageError = new MutableLiveData<>();
loadCoworkerList();
}
return coworkerList;
}
public MutableLiveData<String> getMessageError() {
return messageError;
}
@Override
public void onCoworkerInfoLoadSuccess(List<ShiftModel> shiftModels) {
coworkerList.setvalue(shiftModels);
}
@Override
public void onCoworkerInfoLoadFailed(String message) {
messageError.setvalue(message);
}
}
我要更改的参数是selectedDate
:
DatabaseReference coworkerRef = FirebaseDatabase.getInstance()
.getReference(Common.MAP)
.child(Common.DATA)
.child(selectedDate);
然后在片段中我这样称呼它:
shiftsViewModel.getcoworkerList().observe(this,shiftModel -> {
shiftMapAdapter = new ShiftMapAdapter(ShiftsFragment.this.getcontext(),shiftModel,operatorShow);
coworker_recycler.setadapter(shiftMapAdapter);
coworker_recycler.setLayoutAnimation(layoutAnimationController);
});
所以我该如何将日期从“ 2019-11-14”更改为“ 2019-11-15”