2017-02-17 46 views
0

我已经在Stackoverflow上阅读了很多关于这个问题的文章......我实现了我见过的所有解决方案,但都没有工作。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(); 
} 

我全码:https://github.com/guuilp/PopularMovies

+0

这是更好地张贴代码片段,你认为是相关的。它是否有问题的'onCreate()'方法? – Jack

+0

感谢您的建议@Jack!我使用代码示例更改了原始帖子。我不认为这只是在onCreate方法有问题。 我解释了为什么:这个项目是根据用户选择的内容来显示流行/最受好评的电影。当打开应用程序,它显示热门(空白)。如果我再次查看热门(这是操作栏中的选项),则显示热门。如果我第一次查看最高评分,同样的问题:空白列表。但是,如果我再次检查,是否正确填充。 –

+0

您已经尝试在mRecyclerView.setAdapter(mPopularMoviesAdapter)之前执行loadMoviesData(NetworkUtils.POPULAR_SORT)? – Diekrul

回答

4

我看看你的代码,你的notifyDataSetChanged()工作,问题是你的RecyclerView没有高度。

将其更改为android:layout_height="match_parent"

enter image description here

+1

Lifesaver !!这就是问题所在,我为每个人道歉,我说这个问题是通过notifyDataSetChanged。 –

+1

Luis只是打败了我!!真棒! –

相关问题