2016-04-24 8 views
2

AndroidのRecyclerViewを使用して、(現在表示されていなくても)特定のアイテムの背景を変更したいと思います。Recyclerのビューは、指定された位置のアイテムをプログラムで「変更」します

私が見たすべてのチュートリアルでは、OnItemClickListenerを使用してビューにアクセスする方法を示していますが、私の場合は、ユーザーからの操作なしにプログラムで実行する必要があります。 私は単にビューを取得し、.setBackground()findViewById()などの関数をその上に適用したいだけです。

どのように私は編集したいビューの位置を持ってこれを達成することができますか?あなたがRecycleViewでLayoutManagerでitemViewを得ることができます

+1

更新するビューをどのように知っていますか?他のすべてのビュー? "Jim"のすべてのビュー?詳細を追加してください。 – CaptJak

答えて

2

RecyclerViewでリスト項目の背景を変更するには、次の手順を実行する必要があります:

  1. それはデータに応じてビューの背景を変更しますので、RecyclerView.ViewHolderを変更RecyclerView.Adapter.onBindViewHolderにそれに渡されました。

  2. 変更RecyclerView.Adapter.onBindViewHolderRecyclerView.ViewHolderにデータを渡すには、背景が暗くなるようにする必要があります。

  3. RecyclerView.AdapternotifyDataSetChanged()を呼び出して、RecyclerViewをGUIで更新してください。

+0

作品を知っていますが、アイテムを修正しようとする前にアニメーションが終了するのを待つことができますか? 'move'アニメーションは同時に実行され、背景色を変更すると奇妙なアニメーションになります。 – FrenchFalcon

+0

私は1つの非常に簡単で簡単な解決策を考えることができますが、あなたが求めていることを正確に実行していません。このソリューションの結果は、アイテムの変更の背景色を表示してからリストの一番下に移動する代わりに、元のアイテムがフェードアウトして表示され、下に更新された背景色がフェードインされた新しいアイテムが表示されます。このソリューションには、 'RecyclerView.Adapter.hasStableIds(true)'を呼び出して、 'RecyclerView.Adapter。getItemId() 'はアイテムデータに基づいて異なる値を返すようにします。メソッドが真にunqueの値を返さないようにしてください。 – Eric

+0

あなたの要求に一層合った結果をもたらすかもしれないこの解決策は次の通りです:おそらくあなたは 'RecyclerView.setLayoutAnimationListener()'を使用し、 'Animation.AnimationListener.onAnimationEnd()'メソッドを使用して、バッキングデータの背景色をすぐに変更するのではなく、変更することができますが、複雑になるようです。 – Eric

2

mRecycleView.getLayoutManager().findViewByPosition(item_position) 
+1

ビューが現在表示されていない場合はどうなりますか?それは働くでしょうか? – FrenchFalcon

+0

例外が発生する –

+0

次に、ビューが表示され、その背景が変更されるようにビューを更新するにはどうすればいいですか? – FrenchFalcon

2

変更どんな背景を設定し、notifiyDataSetChanged()を呼び出すために使用されているあなたのRecyclerViewを支持しているデータ項目のプロパティ。

+0

それはトリックでした! – FrenchFalcon

関連する問題