2 votes

ListView liste complète obtient la couleur sélectionnée au lieu de l'enfant

Je suis en train d'essayer de définir la couleur de fond d'un enfant dans mon listView mais pour une raison quelconque, toute la liste obtient la couleur de fond.

Voici le sélecteur

Je l'ai mis dans le listView ici

J'ai également essayé de définir la couleur de fond dans le ListFragment mais pour une raison quelconque, je n'obtiens pas du tout la couleur de cette manière.

Je le fais comme ça

 @Override
    public void onStart() {
        super.onStart();
        ListView view = getListView();
        TextView previousSelected = null;
        int selectedPosition = 0;
        if(view != null) {
            int adapterSize = view.getAdapter().getCount();
            if (selectedView != null) {
                for (int i = 0; i < adapterSize; i++) {
                    Log.d(TAG, "view getchildat " + view.getAdapter().getView(i, null, view) + " sélectionné " + selectedView);
                    if (((TextView) view.getAdapter().getView(i, null, view)).getText().toString().equalsIgnoreCase(((TextView) selectedView).getText().toString())){
                        previousSelected = (TextView) view.getAdapter().getView(i, null, view);
                        Log.d(TAG, "sélectionné est " + previousSelected.getText().toString());
                        view.setSelection(i);
                        view.setSelected(true);
                        view.setFocusable(true);
                        selectedPosition = i;
                    }
                }
            } else if (tagScan.getLastFeedback()[0] != null) {
                Log.d(TAG, "le nombre de fragments est " + count);
                for(int i = 0; i < adapterSize; i++){
                    Log.d(TAG, "view getchildat " + ((TextView)view.getAdapter().getView(i, null, view)).getText().toString() + " sélectionné " + tagScan.getLastFeedback()[count]);
                    if (((TextView) view.getAdapter().getView(i, null, view)).getText().toString().equalsIgnoreCase(tagScan.getLastFeedback()[count])){
                        previousSelected = (TextView) view.getAdapter().getView(i, null, view);
                        Log.d(TAG, "sélectionné est " + previousSelected.getText().toString());
                        view.setSelection(i);
                        view.setSelected(true);
                        view.setFocusable(true);
                        selectedPosition = i;
                    }
                }
            }
            if(previousSelected != null){
                Log.d(TAG,"définir la couleur de la sélection précédente " + previousSelected.getText().toString());
                previousSelected.setBackgroundColor(Color.BLUE);
                previousSelected.setTextColor(Color.WHITE);
                selectedView = previousSelected;
            }
        }
    }

2voto

godot Points 1266
new ArrayAdapter(this, R.layout.feedback_list, feedback.getOptions()){
        @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.setBackgroundColor(Color.parseColor("#4286f4")); // change color code here as you want
        return view;
    }
};

OU :

changez votre R.layout.feedback_list si vous ne souhaitez pas définir les couleurs de fond des éléments pendant l'exécution:

-1voto

M_I Points 122

Si vous utilisez un adaptateur personnalisé, vous pouvez définir la couleur de fond avec view.setBackgroundColor(Color) pour une vue spécifique. Créez une nouvelle classe pour une meilleure clarté.

public class MyAdapter extends BaseAdapter {

    public MyAdapter(List liste, Context ctx) {
        super(ctx, R.layout.row_layout, liste);
        this.list = liste;
        this.context = ctx;
    }

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

        // gonflez la mise en page et réutilisez la vue pour une meilleure performance
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout, parent, false);
        }

        ...

        /*
         * ICI VOUS DÉFINISSEZ VOTRE COULEUR DE FOND POUR LA VUE
        */
        convertView.setBackgroundColor(0xFF00FF00);

        ...

        return convertView;
    }

    // quelques autres méthodes implémentées de BaseAdapter

}

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