Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
android - Change boolean value on onOptionsItemSelected

I am developping an app displaying different movies, with three options on my menu : top rated, most popular and favorites.

I control the movies displayed through boolean, in this way :

  • isFavorite = true && is topRated = false => display the favorites
  • isFavorite = false && topRated = true => display the topRated
  • isFavorite = false && topRated = false => display the most popular

So far, when I set the value manually on the OnCreate(), it works !

My issue comes when I try to change this value by clicking on the differents options of the menu... it displays the same list of movies independently of the option I click on.

Here is my onOptionItemSelected() method :

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);
}

Thanks in advance :)

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

I succeed to resolve my issue ! Here are the modifications, on my MakeTheQuery() method and 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);
}

and

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);
}
over 4 years ago · Santiago Trujillo Denunciar

0

For the adapter to get new set of data, you need to clear the the old data before passing in the new ones and then notify the adapter when you're done. You can do that with this movieAdapter.clear();... Here's how to implement it:

    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;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda