RecyclerViewの各アイテムには、OPEN、LOADING、CLOSEDの3つの状態を持つボタンがあります。RecyclerView getAdapterPosition()はコールバックで-1を返し、アイテムの新しい外観を表示できません
最初はすべてのボタンがOPEN状態です。ボタンをクリックすると、状態がLOADINGに変更され、ネットワークコールがバックグラウンドで実行されます。ネットワークコールが成功した後、ボタンの状態をCLOSEDに変更する必要があります。
は、だから私のアダプタで、私は次のように使用:
holder.button.setOnClickListener(v -> {
holder.state = LOADING;
notifyItemChanged(holder.getAdapterPosition()); /* 1 */
callNetwork(...,() -> {
/* this is the callback that runs on the main thread */
holder.state = CLOSED;
notifyItemChanged(holder.getAdapterPosition()); /* 2 */
});
});
getAdapterPosition()
は私に正しい位置を与えるのでLOADING状態が常に/* 1 */
で正しく可視化されます。
getAdapterPosition
(/* 2 */
)は常に-1
を返すため、ボタンのCLOSED状態は視覚化されません。
この場合、getAdapterPosition()
が間違っている場合があります。
コールバックでアイテムの外観を更新するにはどうすればよいですか? docsから
だけ 'getAdapterPosition()を'使用。なぜあなたはそこにホルダーが必要ですか? – Raghunandan
@Raghunandan getAdapterPositionは、ViewHolderのメソッドです。私は何か見落としてますか? – yuku
あなたのビューホルダーにクリックリスナーがあります。 viewholderクラスのonClickListenerを実装し、そこにクリックリスナーを設定してください – Raghunandan