2017-01-10 20 views
0

GridManagerLayoutRecyclerViewを作成しました。Recyclerビューはカテゴリ別に商品を並べ替えます

簡単にするため、私のカードは2次元、IDと希少性があります。自分のIDか希少性のいずれかによってグリッドにカードを配置するボタンを持っていたいと思います。カードを新しい位置に動かすことができるように、私はこれをやっていかなければならないのでしょうか?

ボタンを押したときに新しいArrayListを作成してから、notifydDatasetChanged()を作成しようとしました。アイテムの位置がうまく切り替わりますが、アニメーションがありません。すなわち、新しい位置効果に「移動」するのではなく、カードが再投入されただけです。現在のリストを変更する代わりに新しいArrayListを定義しているので、これが当てはまると思います。

これを行うには、Collections.swapを使用する必要があることを示す別の記事を読んでいます。これが私が追求すべきものなのかどうかは分かりません。

任意のアドバイスはありますか?

答えて

0

私はあなたに1つの解決策があります!

RecyclerViewアダプタの中にこのメソッドを書き込みます。

public void addItemList(List<JobListApi.Job> newlyCreatedList) { 
    int lastPosition = this.mainItemList.size(); 
    this.mainItemList.addAll(newlyCreatedList); 
    this.notifyItemRangeInserted(lastPosition, newlyCreatedList.size()); 
} 

今、新しく作成されたArrayListでこのメソッドを呼び出します。

これはうまくいきます。

+0

私はこれを試していませんが、これを見ているだけで前の配列の上に追加していますか?これは私の元のリストの項目を複製しませんでしたか? –

+0

@ImranHamidはい、確かに!しかし、新しいリストを追加する前に元のものをクリアすることができます。私はあなたのアニメーションの問題を解決しようとしていました。 –

+0

助けてくれてありがとう!私は 'notifyItemMoved()'を使うと、 'Collections.swap'を使うときの位置移動のアニメーションを処理することに気付きました。 –

0

私はこの問題を解決することができました。誰でも答えが必要な場合は、notifyItemMoved()を入力してください。notifyItemRangeChanged(position,getItemCount)

関連する問題