2016-09-25 16 views
4

私は水平線形レイアウトマネージャと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)の最新バージョンです。ありがとう!

+0

22.xではバグでしたが、23.xでは修正されました。 24.2.1を使用している場合は、コードを必ず確認してください。 –

+0

それでも問題が解決しない場合は、問題追跡ツールにバグを報告してください。 –

+0

私は25.0.0で同じ問題が発生しています –

答えて

9

を削除しました。私はなぜこれが関連するか分かりません。

+1

興味深い、私はこれを試してみて、それがどのようになっているかを知らせます。ありがとう!結果を報告することを忘れた場合は、私にpingをしても構いません。 – JMRboosties

+1

結果を報告するのを忘れた@JMRboosties:p – Mauker

+0

それは私の場合に働いた。 私の意見では、setHasFixedSizeは、recyclerviewにサイズを変更しないように指示するので、要素の削除や追加はrecyclerviewをリフレッシュしません。 notifyDataSetChanged代わりに、recyclerviewを完全に再描画するようにして、動作させるが、アニメーションは使用しない – DSoldo

関連する問題