2017-10-04 4 views
1

RecyclerViewの行の特定のビューを変更する方法。 Adapter.notifyDataSetChangedまたはAdapter.notifyItemChanged行を更新しています。しかし、この行の他のビューに触れることなく、特定のビューを行単位で変更する必要があります。リサイクラビューで行の特定のアイテムを変更する

+1

平均を表示するには?申し訳ありませんが、私はあなたの行のラベル、ボタンの色や行のスタイルを変更するつもりです質問を得るddnt ..?行全体のビューを別のレイアウトxmlに変更したいですか? –

+0

こんにちはビシュヌKR! 私は2つのimageViewと2つのtextViewを持っています。ユーザーが行をクリックするたびに、すべての行のこのtextVIewsの1つでテキストが変更されます。しかし問題は、別のimageViewがPicassoライブラリを介してソースを取得することです。また、notifyDataSetChangedなどを使ってテキストを変更するたびに、PicasaはimageViewを更新し、ユーザーに表示されます。私はこれが起こらないようにしたいので、質問は:行全体に触れることなく、どのように行の特定のビューを変更することができます –

+0

ハア..あなたはピカソがその時にイメージをリロードすることを言っている。ですから、イメージキャッシング技術を使う必要があると思います。ピカソは既に画像が読み込まれていれば再度画像をロードしません。または、次のオプションは、アイテムモデル内のタグを使用して画像を表示して非表示にすることでブロックすることです。 –

答えて

0

まず第一を使用することができます。より効率的です。

第2に、キャッシュメモリ内に既に同じイメージが存在する場合、デバイスは再び同じイメージをダウンロードしません。

今すぐ リスト内のデータを変更し、アダプタまたはリサイクラビューを更新してください。あなたのAdapterClassインサイド

さんがあなたの活動で、このインタフェースを実装し、このメソッドをオーバーライドその後

public interface TheUpdater{ 
    public void updateMyAdapter(int position); 
} 

を言わせて、インターフェイスを作成します。

今、ビューの位置を取得します。

ビュー(ボタンまたは全体親ビュー、つまりレイアウト)のonClick()を上書きして、次のステートメントを実行できます。

mTappedPosition = getAdapterPosition(); 

listener.updateMyAdapter(mTappedPosition); //Update the adapter 

ここで、mTappedPositionはグローバル変数です。

あなたのアクティビティ内

@Override 
updateMyAdapter(int position){ 
---- //Do stuff 
mAdapter.notifyItemSetChanged(position); 
} 
+0

私は知っているが、問題はImageViewがPicasso経由でダウンロードするソースを持っていること、そしてnotifyDatasetChanged Picasso画像とこのアップデートがユーザーに見えるので、私はそれを防止したい –

+0

アダプターの内部でビューの位置を取得できるでしょうか?はいの場合、私はそのための解決策を持っています。 – Dennis

+0

はい、私は変更を行っているとき私は位置を得ることができます –

0

あなたの代わりにピカソの(グーグルでは)Glideを使用して、次のコード

MyRecyclerAdapter.ViewHolder viewHolder= (MyRecyclerAdapter.ViewHolder) recycleView.findViewHolderForAdapterPosition(1); 
    viewHolder.txtView.SetText("Some Text"); 
+0

私が以前に言及したように、それは助けにはならない。 –

+0

更新されたコードを試してみよう – Manish

+0

ちょうどいい瞬間 –

0

私はあなたがイメージのキャッシュ技術を使用する必要があり、画像の読み込みの問題を回避するためだと思います。既に読み込まれた画像は再び読み込まれません。

や画像がすでにロードされている場合

と一人ひとりの行は、あなたがあなたのitemModel(アダプタ項目のデータを持っているDTO)にブール型のフラグを保つことができる設定と同じ画像を示しています。そのモデルを変更してから電話する

yourListToAdapter(index).setFlag(showImage1); // showImage1 boolean flag 

yourAdapter.notifyItemChanged(index); 
関連する問題