Ich erstelle eine Liste mit einem RecyclerView
. Jedes Listenelement ist ein Beitrag von einem Benutzer (gerade hart codiert). Der Hintergrund für jeden Beitrag wird aus einer layer-list
XML-Datei im Zeichenordner geladen.Android RecyclerView ändert nicht Hintergrundfarbe beim ersten Element programmgesteuert
Alles funktioniert wie beabsichtigt mit den Texten usw., aber ich versuche, die Hintergrundfarbe programmgesteuert zu ändern. Es ändert die Hintergrundfarbe für jeden Artikel, außer für den ersten Artikel, und ich kann nicht herausfinden, warum.
Der erste Punkt wird immer die Hintergrundfarbe von der Innenseite der item
solid
Farbe der shape
angegeben shape_background
in der XML-Datei mit dem Namen, so wird es nicht geändert, aber die folgenden Elemente erhalten die Farbe #ff22ff
.
Dies ist die Implementierung des Adapters:
class PostListAdapter extends RecyclerView.Adapter<PostListAdapter.PostViewHolder>{
private LayoutInflater inflater;
private List<PostRow> data = Collections.emptyList();
PostListAdapter(Context context, List<PostRow> data) {
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
PostRow current = data.get(position);
holder.text.setText(current.text.toUpperCase());
holder.time.setText(current.time.toUpperCase());
holder.answers.setText(current.answers.toUpperCase());
try {
// "#ff22ff" will be changed to current.color, unique color for every post
// That string is parsed from a JSON request, hence the try-catch.
int color = Color.parseColor("#ff22ff");
holder.shape.setColor(color);
} catch (Exception e){
e.printStackTrace();
}
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.post_row, parent, false);
return new PostViewHolder(view);
}
@Override
public int getItemCount() {
return data.size();
}
class PostViewHolder extends RecyclerView.ViewHolder {
TextView text;
TextView time;
TextView answers;
GradientDrawable shape;
PostViewHolder(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
time = (TextView) itemView.findViewById(R.id.time);
answers = (TextView) itemView.findViewById(R.id.answers);
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(itemView.getContext(), R.drawable.bubble);
shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.shape_background));
}
}
}
Warum ist der Hintergrund des ersten Elements nicht geändert, aber die Texte?
Vielen Dank im Voraus!
Haben Sie eine Ausnahme? Warum versuchen fangen? – natario
Ich verstehe, dass der Kommentar nicht klar genug war. Die hartcodierte Zeichenkette "# ff22ff" wird später in die Zeichenkette current.color geändert. Diese Zeichenfolge wird von einer JSON-Antwort analysiert. Für den Fall, dass in diesem Prozess etwas durcheinander gerät, sollte man das mit dem Versuch fangen. Ich werde den Kommentar aktualisieren, danke. – Misklahr