我有一个疑问。如果我有一个方法可以异步调用一个api并将其结果转换为livedata对象,而在另一个地方,当数据更改时我将更新我的recyclerview,那么每次调用此方法都会更新recyclerview或,例如:如果url保持不变,则不会更新recyclerview;请帮助。这是用于在Mainactivity onCreate方法中观察数据的代码。
JsonViewModel model = new ViewModelProvider(this).get(JsonViewModel.class);
model.getData("top_rated").observe(this, data -> {
mRecyclerView.setAdapter(new MovieRecyclerViewAdapter(this,data));
});
这里是JsonViewModel类
public class JsonViewModel extends AndroidViewModel {
private JsonLivedata data;
public JsonViewModel(@NonNull Application application) {
super(application);
data=new JsonLivedata();
}
public LiveData<List<Movie>> getData(String path) {
data.loadData(path);
return data;
}
}
这里是JsonLivedata类
public class JsonLivedata extends LiveData<List<Movie>> {
private static final String TAG = "JsonLivedata";
public JsonLivedata() {
}
public void loadData(String path){
Log.d(TAG, "loadData: Called");
new AsyncTask<String,Void,List<Movie>>(){
@Override
protected List<Movie> doInBackground(String... path) {
List<Movie> allTopMovies= JsonResponseFetcher.makeAsyncQueryForMovies(path[0]);
return allTopMovies;
}
@Override
protected void onPostExecute(List<Movie> movies) {
setValue(movies);
}
}.execute(path);
}
}
这是调用livedata loaddata方法的方法
changeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
model.getData("popular");
}
});
或者我做错事。有人可以建议
RecyclerView
JsonViewModel model = new ViewModelProvider(this).get(JsonViewModel.class);
MovieRecyclerViewAdapter movieRecyclerViewAdapter = new MovieRecyclerViewAdapter(this, dataList)
mRecyclerView.setAdapter(movieRecyclerViewAdapter);
然后在数据更改时执行此操作
model.getData("top_rated").observe(this, data -> { dataList.clear(); dataList.addAll(data); movieRecyclerViewAdapter.notifyDataSetChanged(); });