notifyDataSetChanged打开应用程序时不工作
问题描述:
我已经在*上阅读了很多关于这个问题的文章......我实现了我见过的所有解决方案,但都没有工作。notifyDataSetChanged打开应用程序时不工作
发生了什么:打开应用程序时notifyDataSetChanged不起作用。如果我改变方向或改变排序(流行到最高评分,或反之亦然),它的工作原理。我debbuged的代码和数据正确到达适配器,但通知不起作用,所以接口没有得到更新。
任何人都可以帮助我吗?
我的onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources rs = getResources();
int numColumns = rs.getInteger(R.integer.list_columns);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_popular_movies);
mErrorMessageDisplay = (TextView)findViewById(R.id.tv_error_message_display);
mLoadingIndicator = (ProgressBar) findViewById(R.id.pb_loading_indicator);
//Resource based on https://discussions.udacity.com/t/is-there-a-way-to-fit-columns-in-gridlayoutmanager/221936/4
GridLayoutManager layoutManager = new GridLayoutManager(this, numColumns);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setHasFixedSize(true);
mPopularMoviesAdapter = new PopularMoviesAdapter(this, this);
mRecyclerView.setAdapter(mPopularMoviesAdapter);
loadMoviesData(NetworkUtils.POPULAR_SORT);
}
的loadMoviesData方法简单地调用execute()从的AsyncTask。
我onPostExecute代码:
@Override
protected void onPostExecute(String result) {
Log.v(TAG, "onPostExecute");
mLoadingIndicator.setVisibility(View.INVISIBLE);
if(result != null){
showMoviesDataView();
Gson gson = new Gson();
Movies data = gson.fromJson(result, Movies.class);
mPopularMoviesAdapter.setMovieList(data);
} else {
showErrorMessage();
}
}
我setMovieList方法:
public void setMovieList(Movies movieList) {
this.movieList = movieList;
this.notifyDataSetChanged();
}
这是更好地张贴代码片段,你认为是相关的。它是否有问题的'onCreate()'方法? – Jack
感谢您的建议@Jack!我使用代码示例更改了原始帖子。我不认为这只是在onCreate方法有问题。 我解释了为什么:这个项目是根据用户选择的内容来显示流行/最受好评的电影。当打开应用程序,它显示热门(空白)。如果我再次查看热门(这是操作栏中的选项),则显示热门。如果我第一次查看最高评分,同样的问题:空白列表。但是,如果我再次检查,是否正确填充。 –
您已经尝试在mRecyclerView.setAdapter(mPopularMoviesAdapter)之前执行loadMoviesData(NetworkUtils.POPULAR_SORT)? – Diekrul