0

J'utilise recyclerView.I essayer de changer la couleur d'arrière-plan article cliquez avec le fichier selector.xmlchangement RecyclerView fond élément sélectionné et la couleur du texte

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/trains_vagon_selected_departure" android:state_pressed="true" /> 
<item android:drawable="@drawable/trains_vagon_selected_departure" android:state_focused="true" /> 

<item android:drawable="@drawable/trains_vagon_selected_white"/> 

Ceci est mon code adaptateur

public class TrainsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
public ArrayList<Train> trains; 
public Context context; 
private LayoutInflater inflater; 
private String statusString = ""; 

public class GenericViewHolder extends RecyclerView.ViewHolder { 
    public TextView trainTime; 
    public LinearLayout vagoncontainer; 
    private ImageView statusImageView; 

    public GenericViewHolder(View view) { 
     super(view); 

     trainTime = (TextView) view.findViewById(R.id.train_time); 
     statusImageView = (ImageView) view.findViewById(R.id.departure_next_img); 

     vagoncontainer = (LinearLayout) view.findViewById(R.id.vagon_container); 


    } 
} 

public TrainsAdapter(Context context, ArrayList<Train> trains, String statusString) { 
    this.context = context; 
    this.trains = trains; 
    inflater = LayoutInflater.from(context); 
    this.statusString = statusString; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.trains_adapter_item, parent, false); 
    GenericViewHolder holder = new GenericViewHolder(view); 
    return holder; 


} 


@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
    if (holder instanceof GenericViewHolder) { 
     final GenericViewHolder genericViewHolder = (GenericViewHolder) holder; 
     genericViewHolder.vagoncontainer.removeAllViews(); 
     Train train = trains.get(position); 
     if (statusString.equals("departure")) 
      genericViewHolder.statusImageView.setImageResource(R.mipmap.departure_icon); 
     else 
      genericViewHolder.statusImageView.setImageResource(R.mipmap.return_icon); 
     ArrayList<Vagons> vagons = train.getVagons(); 
     for (int i = 0; i < vagons.size(); i++) { 
      if (vagons.get(i).getEnable().equals("1")) { 
       LayoutInflater layoutInflater = LayoutInflater.from(context); 
       final LinearLayout vagonView = (LinearLayout) layoutInflater.inflate(R.layout.trains_vagon_child, null); 
       genericViewHolder.vagoncontainer.setBackgroundColor(Color.WHITE); 
       RelativeLayout relativeLayout = (RelativeLayout) vagonView.findViewById(R.id.selected_layout); 

       if (statusString.equals("departure")) 
        relativeLayout.setBackgroundResource(R.drawable.recyclerview_selected_departure); 
       else 
        relativeLayout.setBackgroundResource(R.drawable.recyclerview_selected_returned); 

       TextView vagonClassName = (TextView) vagonView.findViewById(R.id.vagon_class_name); 
       TextView vagonClassPrice = (TextView) vagonView.findViewById(R.id.vagon_class_price); 
       vagonClassName.setText(vagons.get(i).getName()); 
       vagonClassPrice.setText(vagons.get(i).getAmount()); 

       genericViewHolder.vagoncontainer.addView(vagonView); 
      } 
     } 

     genericViewHolder.trainTime.setText(train.getDeparture()); 
    } 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 



@Override 
public int getItemCount() { 
    return trains.size(); 
} 

public Train getItem(int position) { 
    return trains.get(position); 
} 



@Override 
public int getItemViewType(int position) { 
    return position; 
} 

} J'ai deux questions. 1) Lorsque je cours le premier élément dans recyclerView également sélectionné automatiquement.Pourquoi? Comment puis-je résoudre ce problème? 2) Est-il possible de changer la couleur du texte à l'intérieur du fichier sélecteur xml? Je sais comment changer l'arrière-plan de recyclerView et la couleur du texte par position, mais pour le moment, chaque élément par position a des tableaux et j'y ajoute ma position et j'essaie de changer le fond et la couleur du texte. moyenne vue vagonView) remercie tout le monde

Répondre

0

son peut être dû à venir sélectionnée lorsque vous exécutez l'application à cause de sur state_focus="true".

+0

Vous avez raison, mais quand je l'ai écrit faux par défaut, puis concentrez ne fonctionne pas dans tous les temps @Hasmukh kachhatiya – BekaKK

+0

alors vous devez essayer 'state_pressed = « true »' –

+0

Je l'ai essayé et la première fois le premier élément sélectionné automatiquement @Hasmukh kachhatiya – BekaKK

0
  1. Comment savez-vous le premier élément est sélectionné?
  2. Il suffit de définir android:textColor avec une liste d'état de couleur
+0

1) quand je cours le premier élément est déjà sélectionné 2) que voulez-vous dire? pouvez-vous expliquer plus? @Cesario – BekaKK

+0

pour 2. supposons que vous ayez un TextView, l'ensemble 'textColor' à un statelist de couleur (selector xml), mais vous devez créer un autre' xml' pour la couleur du texte – Cesario

+0

Je l'ai essayé mais je ne travaille pas @Cesario – BekaKK