Livedata数据更改模式

问题描述 投票:0回答:1

我有一个疑问。如果我有一个方法可以异步调用一个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");
        }
    });

或者我做错事。有人可以建议

android android-livedata android-architecture-components
1个回答
0
投票
首先创建适配器实例并设置为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(); });

© www.soinside.com 2019 - 2024. All rights reserved.