Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 排序RecyclerView后notifyDatasetChanged()不工作_Android_Android Recyclerview_Notifydatasetchanged - Fatal编程技术网

Android 排序RecyclerView后notifyDatasetChanged()不工作

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

我的RecyclerView在观看的电影前面包含复选标记。在对我的RecyclerView进行排序后,我正在使用
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();
    }