私は大きなアイテムのリストを持つRecyclerViewを持っています。このRecyclerViewには、無限スクロールのためのOnScrollListenerがあります。 RecyclerViewで表示されていないときに、Hilighted/Selectedアイテムの色が変わります
- 項目が選択された場合、私は、特定の色で強調表示し 場合非選択色の変化白/正常に。
私が直面している問題は、上下にスクロールしていくつかの項目を選択すると、すでに選択されている項目の色が白に変わります。
モデルクラスでブール変数(isSelected)を追加して、選択した項目を強調表示しようとしましたが、以前と同じ問題に直面しています。現在、recyclerViewでは、ビューから1つの項目だけを選択できます。いくつかの調査の後、コンセプトの一部はthisの記事から取得しました。複数の項目を選択できるようにするには、このコードをどのように変更/調整するのだろうか。
私は非常に巨大で秘密ですが、このシナリオの一般的な修正がある場合、それは何ですか?
背景:このアプリケーションはチャットアプリであり、送受信されたテキストを表示しています。ユーザーは、いくつかの特定のテキストを選択できる必要があり、他の人とそれを共有できるはずです。
編集:私は私のonBindViewHolderでコードを入れています:要件は、単一の項目を選択することだったとき
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final PostDataColumns mPostDataColumns = data.get(position);
holder.textCardView.setBackgroundColor(mPostDataColumns.isSelected() ? getResources().getColor(R.color.long_press):
getResources().getColor(android.R.color.white));
holder.textCardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mPostDataColumns.setSelected(!mPostDataColumns.isSelected());
if(mPostDataColumns.isSelected()) {
holder.textCardView.setBackgroundResource(R.color.long_press);
multipleSelectedPositions.add(holder.getLayoutPosition());
} else if(!mPostDataColumns.isSelected()) {
holder.textCardView.setBackgroundResource(android.R.color.white);
multipleSelectedPositions.remove(holder.getAdapterPosition());
}
//Adapter.this.onLongClick(holder, position);
return true;
}
});
holder.textCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.textCardView.setBackgroundResource(android.R.color.white);
/* clearLongSelection(holder, position, alignParentRight,
data.get(position).getReceiverUserId().length() > 5); */
}
});
}
私はonclickのとonLongClickにコメントしているコードを使用しました。インスタンスはselectedPosition = -1 variable-として
public boolean clearLongSelection(ViewHolder holder, int position) {
if (selectedPosition >= 0) {
if (selectedPosition == position) {
holder.parentLayout.setBackgroundResource(android.R.color.transparent);
if (alignParentRight) {
holder.mediaCardView.setBackgroundResource(android.R.color.white);
holder.assessmentCardView.setBackgroundResource(android.R.color.white);
holder.surveyCardView.setBackgroundResource(android.R.color.white);
holder.documentCardView.setBackgroundResource(android.R.color.white);
holder.textCardView.setBackgroundResource(android.R.color.white);
} else {
holder.mediaCardView.setBackgroundResource(R.color.long_press);
holder.assessmentCardView.setBackgroundResource(R.color.long_press);
holder.surveyCardView.setBackgroundResource(R.color.long_press);
holder.documentCardView.setBackgroundResource(R.color.long_press);
holder.textCardView.setBackgroundResource(R.color.long_press);
}
selectedPosition = -1;
invalidateOptionsMenu();
getSupportActionBar().setTitle(intentData.getName());
}
return true;
}
return false;
}
public void onLongClick(ViewHolder holder, int position) {
if (selectedPosition < 0) {
holder.parentLayout.setBackgroundResource(R.color.long_press);
holder.mediaCardView.setBackgroundResource(R.color.long_press);
holder.assessmentCardView.setBackgroundResource(R.color.long_press);
holder.surveyCardView.setBackgroundResource(R.color.long_press);
holder.documentCardView.setBackgroundResource(R.color.long_press);
holder.textCardView.setBackgroundResource(R.color.long_press);
selectedPosition = position;
invalidateOptionsMenu();
getSupportActionBar().setTitle("1 Selected");
} else {
}
}
のonClickとclearLongSelection可変selectedPositionクラスに初期化される:
これらはのonClickとonLOngClickで呼び出された方法です。リサイクル・ビュー・アダプタで選択した項目を追跡する
を好きな位置がすでに選択されているかどうかを確認かonBindViewHolderにあなたのコードを投稿しますか? – Shruti
を確認してください。https://stackoverflow.com/questions/20611123/listview-subobject-clickable-confilct/20612237#20612237クリックするとボタンの色が変わります。同様のメカニズムを背景色としても使用できます – Raghunandan
単一または複数選択? – KeLiuyue