2017-02-17 8 views
0

私はこの問題について、Stackoverflowで非常に多くの記事を読んでいます...私は見たすべてのソリューションを実装しましたが、notifyDataSetChangedは、アプリケーションを開いたときに動作しません。

何が起こっているのですか?アプリケーションを開くときにnotifyDataSetChangedが機能しません。私が向きを変えたり、並べ替えを変えたりすると(人気のあるものから人気のものへ、あるいはその逆)、それが動作します。コードをデバブし、データがアダプタに正しく到着しましたが、通知が機能しないため、インターフェイスが更新されません。

誰でも助けてくれますか?

私の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方法は、単に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(); 
} 

私の完全なコード:私はあなたのコードを見ていたし、あなたのnotifyDataSetChanged()が動作しているhttps://github.com/guuilp/PopularMovies

+0

それはあなたが関連していると思うのコードの小さなスニペットを投稿する方が良いでしょう。それは問題を持っている 'onCreate()'メソッドですか? – Jack

+0

アドバイスありがとう、@ジャック!コードサンプルを使って元の投稿を変更しました。私はそれが問題を持っているonCreateメソッド上にあるとは思わない。 私は理由を説明します:このプロジェクトは、ユーザーが選択したものに基づいて、人気の高い映画を表示することです。アプリケーションを開くと、人気(空白)が表示されます。私が再びポピュラーをチェックすると(アクションバーのオプションです)、ポピュラーが表示されます。初めてトップ評価をチェックした場合、同じ問題:空白のリスト。しかし、私が再びチェックすると、正しく入力されます。 –

+0

mRecyclerView.setAdapter(mPopularMoviesAdapter)の前にloadMoviesData(NetworkUtils.POPULAR_SORT)を実行しようとしましたか? – Diekrul

答えて

4

、問題RecyclerViewには身長がありません。

android:layout_height="match_parent"に変更してください。

enter image description here

+1

Lifesaver !!それは問題でした。問題がnotifyDataSetChangedであると誰もが謝罪しました。 –

+1

Luisが私にそれを打ち明けました!!恐ろしいです! –

関連する問題