Android 排序RecyclerView后notifyDatasetChanged()不工作
我的RecyclerView在观看的电影前面包含复选标记。在对我的RecyclerView进行排序后,我正在使用Android 排序RecyclerView后notifyDatasetChanged()不工作,android,android-recyclerview,notifydatasetchanged,Android,Android Recyclerview,Notifydatasetchanged,我的RecyclerView在观看的电影前面包含复选标记。在对我的RecyclerView进行排序后,我正在使用notifyDatasetChanged()。单击菜单选项后,即使项目正在更改,复选标记也不会更改并保持不变 这是我活动课的一部分: public class SearchActivity extends AppCompatActivity { MoviesAdapter adapter; List<Movie> movies = new ArrayList
notifyDatasetChanged()
。单击菜单选项后,即使项目正在更改,复选标记也不会更改并保持不变
这是我活动课的一部分:
public class SearchActivity extends AppCompatActivity {
MoviesAdapter adapter;
List<Movie> movies = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new MovieAdapter(movies, SearchActivity.this);
recyclerView.setAdapter(adapter);
fetchMovies("ascending");
}
private void fetchMovies(String order) {
movies.clear();
movies.addAll(response.body().getMovies(order));
adapter.notifyDatasetChanged();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.ascending:
fetchMovies("ascending");
adapter.notifyDatasetChanged();
return true;
case R.id.descending:
fetchMovies("descending");
adapter.notifyDatasetChanged();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
你应该使用movies.addAll()而不是movies.add()。因为很明显,您要从api响应中添加多个项
如果无效,请在适配器类中创建一个方法,并将新值传递给它,然后从该方法中调用notifyDatasetChanged:
public void notifyNewData(List<Movie> movies){
this.movies.clear()
this.addAll(movies)
this.notifyDatasetChanged();
}
public void notifyNewData(列出电影){
这个。电影。清除()
这个.addAll(电影)
this.notifyDatasetChanged();
}
和调用适配器。notifyNewData(电影);从主类中,适配器负责所有工作。post适配器代码中的响应是什么:movies.add(response.body().getMovies(order))@play_err_我使用API获取电影Retrofit@RandomyzeEverything电影是按要求的顺序来的吗?@play\u err\u是的,它们是按要求的顺序来的。我正在使用
movies.addAll()
。我把那个复制粘贴错了。现在编辑我的代码。尝试我提到的另一个选项,它应该会起作用。请发布适配器类的代码,这样我可以帮助进一步添加MovieAdapter
Let-us。
public void notifyNewData(List<Movie> movies){
this.movies.clear()
this.addAll(movies)
this.notifyDatasetChanged();
}