ich eine RecyclerView mit einem horizontalen linearen Layout-Manager haben wie folgt erklärt:Android RecyclerView Adapter: notifyItemInserted und notifyItemMoved bei Index 0 nicht funktioniert
RecyclerView graph = (RecyclerView) findViewById(R.id.graph);
RecyclerView.LayoutManager classManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
graph.setLayoutManager(classManager);
graph.addItemDecoration(new ComponentDecorator(this)); //Just sets a margin around each item
Ich habe eine Methode, die wie diese einen Platzhalter Blick in die RecyclerView Einsätze :
private void insertPlaceholder(int index) {
int placeholderIndex = getIndexOfPlaceholder(); //returns index of existing placeholder, -1 if none
//No need to do anything
if(placeholderIndex == index)
return;
if(placeholderIndex == -1) {
ClassGraphItem placeholder = new ClassGraphItem();
placeholder.setType(ClassGraphItem.PLACEHOLDER);
mItems.add(index, placeholder);
Print.log("notify item inserted at index", index);
notifyItemInserted(index);
}
else {
ClassGraphItem placeholder = mItems.get(placeholderIndex);
mItems.remove(placeholderIndex);
mItems.add(index, placeholder);
notifyItemMoved(placeholderIndex, index);
}
}
Der Platzhalter ist nur ein unsichtbares Ansicht, die eine Raumöffnung zwischen zwei vorhandenen Ansichten simuliert:
private class PlaceholderViewHolder extends RecyclerView.ViewHolder {
public PlaceholderViewHolder(View itemView) {
super(itemView);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(mComponentWidth, 1);
itemView.setLayoutParams(params);
itemView.setVisibility(View.INVISIBLE);
}
}
Wenn der eingefügte Index> 0 ist, funktioniert es einwandfrei. Bei Index 0 funktioniert jedoch entweder das Einfügen eines Platzhalters oder das Verschieben eines vorhandenen Platzhalters in den Index 0 nicht, insbesondere repliziert die RecyclerView das neue Element nicht, das am Index 0 eingefügt wurde. Wenn ich notifyDataSetChanged()
verwendet habe, funktioniert es. aber das animiert nicht und ist nicht der Effekt, nach dem ich suche. Das scheint mir ein Fehler zu sein, aber ich wollte sicherstellen, dass es nichts anderes gibt, was dieses Problem verursacht.
Ich bin auf der neuesten Version der Recyclerview-Support-Bibliothek (24.2.1). Vielen Dank!
Es war ein Fehler in 22.x, wurde aber in 23.x behoben. Wenn Sie 24.2.1 verwenden, sollten Sie Ihren Code unbedingt überprüfen. –
Und wenn es immer noch nicht funktioniert, einen Fehler im Issue Tracker einreichen. –
Ich erlebe das gleiche Problem auf 25.0.0 –