Estoy desarrollando una aplicación que muestra diferentes películas, con tres opciones en mi menú: mejor calificadas, más populares y favoritas.
Controlo las películas que se muestran a través de booleanos, de esta manera:
Hasta ahora, cuando establecí el valor manualmente en OnCreate(), ¡funciona!
Mi problema surge cuando trato de cambiar este valor haciendo clic en las diferentes opciones del menú... muestra la misma lista de películas independientemente de la opción en la que haga clic.
Aquí está mi método onOptionItemSelected() :
public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId){ case R.id.most_popular: setFavorite(false); setTopRated(false); movieAdapter.notifyDataSetChanged(); Context context = MainActivity.this; String textToShow = "Sorted by most popular"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; case R.id.highest_rated: setFavorite(false); setTopRated(true); movieAdapter.notifyDataSetChanged(); context = MainActivity.this; textToShow = "Sorted by rate"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; case R.id.favorites: setFavorite(true); setTopRated(false); movieAdapter.notifyDataSetChanged(); context = MainActivity.this; textToShow = "Here is your favorites list"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; default: Log.w(TAG, "Menu selection is not handled. ItemId;" + itemId); } return super.onOptionsItemSelected(item); }Gracias por adelantado :)
¡Logre resolver mi problema! Aquí están las modificaciones, en mi método MakeTheQuery() y onOptionItemSelected ;
private void makeTheQuery() { movies.clear(); isFavorite = isFavorite(); isTopRated = isTopRated(); URL SearchUrl; if (!isTopRated) { SearchUrl = NetworkUtils.buildUrl(); }else{ SearchUrl = NetworkUtils.buildUrlTopRated(); } new TheMovieAsyncTask().execute(SearchUrl); }y
public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId){ case R.id.most_popular: setFavorite(false); setTopRated(false); movieAdapter.notifyDataSetChanged(); makeTheQuery(); Context context = MainActivity.this; String textToShow = "Sorted by most popular"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; case R.id.highest_rated: setFavorite(false); setTopRated(true); movieAdapter.notifyDataSetChanged(); makeTheQuery(); context = MainActivity.this; textToShow = "Sorted by rate"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; case R.id.favorites: setFavorite(true); setTopRated(false); movieAdapter.notifyDataSetChanged(); makeTheQuery(); context = MainActivity.this; textToShow = "Here is your favorites list"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break; default: Log.w(TAG, "Menu selection is not handled. ItemId;" + itemId); } return super.onOptionsItemSelected(item); }Para que el adaptador obtenga un nuevo conjunto de datos, debe borrar los datos antiguos antes de pasar los nuevos y luego notificar al adaptador cuando haya terminado. Puedes hacer eso con este movieAdapter.clear(); ... He aquí cómo implementarlo:
case R.id.highest_rated: //Clear the adapter whenever this highest rated movie is clicked movieAdapter.clear(); //Clear the adapter whenever this highest rated movie is clicked setFavorite(false); setTopRated(true); movieAdapter.notifyDataSetChanged(); context = MainActivity.this; textToShow = "Sorted by rate"; Toast.makeText(context, textToShow, Toast.LENGTH_SHORT).show(); break;