私は水平線形レイアウトマネージャとRecyclerViewを持って動作していないインデックス0 notifyItemInsertedとnotifyItemMovedこのように宣言:アンドロイドRecyclerViewアダプタ:
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
私はこのようなRecyclerViewにプレースビューを挿入する方法を有します:
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);
}
}
プレースホルダは、2つの既存のビューの間の空間の開口をシミュレートするだけで目に見えない図である。
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);
}
}
挿入されたインデックスが> 0の場合、完全に機能します。しかし、インデックス0では、プレースホルダを挿入するか、既存のプレースホルダを0インデックスに移動すると動作しません。具体的には、RecyclerViewはアニメーションを作成せずにインデックス0に挿入された新しいアイテムを表示します。notifyDataSetChanged()
を使用した場合、しかし、それはアニメートされず、私が探している効果ではありません。これは私のバグのようですが、私はこの問題を引き起こしていた何か他のものがないことを確認したかったのです。
私はrecyclerviewサポートライブラリ(24.2.1)の最新バージョンです。ありがとう!
22.xではバグでしたが、23.xでは修正されました。 24.2.1を使用している場合は、コードを必ず確認してください。 –
それでも問題が解決しない場合は、問題追跡ツールにバグを報告してください。 –
私は25.0.0で同じ問題が発生しています –