2017-01-01 6 views
0

ネットワークコールを介してデータをロードし、デバイスがonSaveInstanceStateコールバックに格納されたデータをローテーションすると、アダプタに変更が通知されますが、回転。下記 コードスニペット:onSaveInstanceStateコールバックに格納されたデバイスデータがロードされていない

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    // setSupportActionBar(toolbar); 

    movies=new ArrayList<Movie_model>(); 

    madapter=new Movie_adapter(this,new Movie_adapter.OnItemClickListener(){ 
     @Override 
     public void onItemClick(Movie_model movie_item) { 
      Toast.makeText(getApplicationContext(), "Item Clicked", Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(getApplicationContext(),MovieDetail.class); 
      intent.putExtra("Movie_item", movie_item); 
      intent.putExtra("type", "normal"); 
      startActivity(intent); 
     }; 
    },movies); 
    mAdapterFav = new CustomCursorAdapter(this,new CustomCursorAdapter.OnItemClickListener(){ 
     @Override 
     public void onItemClick(Movie_model movie_item) { 
      Toast.makeText(getApplicationContext(), "Item Clicked", Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(getApplicationContext(),MovieDetail.class); 
      intent.putExtra("Movie_item", movie_item); 
      intent.putExtra("type", "fav"); 
      startActivity(intent); 
     };}); 
    recyclerview = (RecyclerView) findViewById(R.id.recyclerview); 
    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(),3); 
    recyclerview.setLayoutManager(mLayoutManager); 
    recyclerview.setItemAnimator(new DefaultItemAnimator()); 
    recyclerview.setAdapter(madapter); 
    if(savedInstanceState!=null) 
    { 
     // movies.clear(); 
     Log.i("tag", String.valueOf(movies.size())); 
     movies=savedInstanceState.getParcelableArrayList("list"); 
     madapter.notifyDataSetChanged(); 
     //recyclerview.setAdapter(madapter); 
     // Log.i("tag", String.valueOf(movies.size())); 
    } 
    else 
    { 
     mnetworking= new Networking(); 
     mnetworking.execute(discover_movies); 
     Log.i("tag","in"); 
    } 

} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelableArrayList("list",movies); 
    Log.i("tag", String.valueOf(movies.size())); 
} 

は、リストのサイズがgetParcelableArrayList(「リスト」)後に20であることに注意。が呼び出されます。 と心のbogglerはアダプタが再びif文で初期化されるとき、データが

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    // setSupportActionBar(toolbar); 

    movies=new ArrayList<Movie_model>(); 

    madapter=new Movie_adapter(this,new Movie_adapter.OnItemClickListener(){ 
     @Override 
     public void onItemClick(Movie_model movie_item) { 
      Toast.makeText(getApplicationContext(), "Item Clicked", Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(getApplicationContext(),MovieDetail.class); 
      intent.putExtra("Movie_item", movie_item); 
      intent.putExtra("type", "normal"); 
      startActivity(intent); 
     }; 
    },movies); 
    mAdapterFav = new CustomCursorAdapter(this,new CustomCursorAdapter.OnItemClickListener(){ 
     @Override 
     public void onItemClick(Movie_model movie_item) { 
      Toast.makeText(getApplicationContext(), "Item Clicked", Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(getApplicationContext(),MovieDetail.class); 
      intent.putExtra("Movie_item", movie_item); 
      intent.putExtra("type", "fav"); 
      startActivity(intent); 
     };}); 
    recyclerview = (RecyclerView) findViewById(R.id.recyclerview); 
    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(),3); 
    recyclerview.setLayoutManager(mLayoutManager); 
    recyclerview.setItemAnimator(new DefaultItemAnimator()); 
    recyclerview.setAdapter(madapter); 
    if(savedInstanceState!=null) 
    { 
     // movies.clear(); 
     Log.i("tag", String.valueOf(movies.size())); 
     movies=savedInstanceState.getParcelableArrayList("list"); 
    // madapter.notifyDataSetChanged(); 
     madapter=new Movie_adapter(this,new Movie_adapter.OnItemClickListener(){ 
      @Override 
      public void onItemClick(Movie_model movie_item) { 
       Toast.makeText(getApplicationContext(), "Item Clicked", Toast.LENGTH_LONG).show(); 
       Intent intent=new Intent(getApplicationContext(),MovieDetail.class); 
       intent.putExtra("Movie_item", movie_item); 
       intent.putExtra("type", "normal"); 
       startActivity(intent); 
      }; 
     },movies); 
     recyclerview.setAdapter(madapter); 
     Log.i("tag", String.valueOf(movies.size())); 
    } 
    else 
    { 
     mnetworking= new Networking(); 
     mnetworking.execute(discover_movies); 
     Log.i("tag","in"); 
    } 

} 
+0

ちょっと質問がありますか? Udacity Nanodegreeもやっていますか? –

+0

@KartikSharmaあり –

答えて

1

rotataion時に示されているあなたのlogは、あなたがsavedInstanceStateで値を取得する前に、あなたが取得した値をログに記録されないということです。

それは(まだお持ちでない場合)、あなたのアダプタクラスへのaddAllメソッドを追加する必要がありますように、そして、そのように動画データを追加になります。

if(savedInstanceState != null){ 
    movies = savedInstanceState.getParcelableArrayList("list"); 
    madapter.addAll(movies); // Make sure you add an addAll() in your adapter's class first 
    madapter.notifyDataSetChanged(); 
} 
// The rest of your code 

アダプタクラス内

public void addAll(ArrayList al){ 
    for(int i=0; i < al.size; i++){ 
     // add to your adapter's data set 
     // yourDataSet.add(al.get(i)); 
    } 
} 
+0

アダプターにaddAll()メソッドがありません –

+0

データセットにデータがあり、そのデータが表示されません –

+0

'movies'にはデータまたは' madapter'がありますか? –

関連する問題