2 votes

Changer la propriété du champ listviews de l'activité principale

Je travaille sur une application Android. Dans mon activité principale, je dois implémenter une liste. Voici la forme d'exemple de ma page

|----------------------| \
|  | Bouton |          |  \
|----------------------|   \                  
| liste vue rangée 1     | \   \
| liste vue rangée 2     |  \   \--------- Écran
| liste vue rangée 3     | / --/----- ListView 
|                        |/   /
|                        |  /
|                        | /
|______________________|/

Le bouton est sur ma page d'activité et les rangées de la liste sont créées dans BaseAdapter. ListView contient un TextView. Maintenant, je dois changer la couleur de fond des TextView lorsque je clique sur le bouton depuis l'activité et la prochaine fois que je clique sur le bouton, la couleur des textViews conservera la couleur précédente. Comment puis-je le faire mes amis ?. J'ai déclaré le TextView dans la méthode getView().

2voto

skyrift Points 743

Il existe probablement d'autres méthodes, mais je passerais en revue les lignes de la liste dans la méthode OnClick pour le bouton. Quelque chose comme :

Dans les définitions de champs de votre activité :

    static final int couleurA=Color.argb(255,255,0,0);
    static final int couleurB=Color.argb(255,0,255,0);
    int couleurActuelle=couleurA;

Dans votre activité OnCreate :

        Button monBouton = (Button) findViewById(R.id.monBouton); 
        final ListView maListView = (ListView) findViewByID(R.id.maListView);
        //changez monBouton avec l'ID de votre bouton, et maListView avec l'ID de votre ListView
        bouton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Ceci est le code pour basculer les couleurs, vous pouvez faire à peu près ce que vous voulez ici cependant
                if (couleurActuelle==couleurA){
                    couleurActuelle=couleurB;
                } else {
                    couleurActuelle=couleurA;
                }

                //Cela parcourt toutes les vues racines dans la ListView. Si vous voulez changer la
                //couleur d'une seule vue dans la mise en page de la ligne, dans la boucle for utilisez
                //rowView.findViewById(R.id.myViewInRow).setBackgroundColor(couleurActuelle);
                //à la place, pour obtenir la vue pertinente dans la ligne
                View rowView;
                for (int i=0;i

0voto

sarath Points 891

Enfin, j'ai trouvé la solution. Cela peut être utile à d'autres. Mais je ne suis pas sûr de la qualité de mon code.

Étape 1)

Je crée une variable dans mon activité

static int hidestate=0;

Et dans la méthode onClick des boutons de masquage, j'écris ceci

hide_btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if (hidestate==0) {

                hidestate=1;

                sMSConversationAdapter.notifyDataSetChanged();
                hide_btn.setText("Afficher tout");

            }else {
                hidestate=0;

                sMSConversationAdapter.notifyDataSetChanged();
                hide_btn.setText("Masquer tout");
            }

        }
    });

Étape 2) Voici la méthode getView() de ma classe BaseAdapter

public View getView(final int position, View convertView, ViewGroup parent) {

    View vi=convertView;
    final TextView message;

    if(convertView==null)
        vi = inflater.inflate(R.layout.smsconversation_row, null);

    RelativeLayout nws=(RelativeLayout)vi.findViewById(R.id.all);
    message=(TextView)vi.findViewById(R.id.snt_txt);

    if (SMSConversationHome.hidestate==1) {
        message.setVisibility(View.INVISIBLE);

    }
    else{

        message.setVisibility(View.VISIBLE);

    }
}

Merci les amis pour votre aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X