Я покажу вам, как добиться того, что вы ищете, на простом примере, чтобы показать список строк.
Мой взгляд на представление элемента в представлении RecyclerView будет test_cell_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/holder_background"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"/>
</LinearLayout>
И я создал адаптер, расширяющий RecyclerView.Adapter
import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
private int selectedPos = 0;
private OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(View viewItem, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout background;
TextView itemText;
ViewHolder(final View viewItem) {
super(viewItem);
background = (LinearLayout) viewItem.findViewById(R.id.holder_background);
itemText = (TextView) viewItem.findViewById(R.id.item_text);
viewItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Triggers click upwards to the adapter on click
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(viewItem, position);
notifyItemChanged(selectedPos);
selectedPos =getAdapterPosition();
notifyItemChanged(selectedPos);
}
}
}
});
}
public void changeToSelect(int colorBackground) {
background.setBackgroundColor(colorBackground);
}
}
private List<String> list;
private Context context;
public TestAdapter(Context context, List<String> list) {
this.list = list;
this.context= context;
}
@Override
public TestAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View itemView = inflater.inflate(R.layout.test_cell_item, parent, false);
ViewHolder itemViewHolder = new ViewHolder(itemView);
return itemViewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.changeToSelect(selectedPos == position ? Color.parseColor("#ca3854") : Color.BLACK);
TextView filterText = holder.itemText;
filterText.setTextSize(30);
filterText.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
}
Здесь вы можете видеть, что я создал интерфейс для использования в качестве OnItemClickListener.Я определил глобальную переменную для хранения выбранной позиции элемента.При каждом щелчке по представлению я изменяю позицию выбранного элемента и уведомляю об изменениях в адаптере, чтобы он мог обновлять свой вид с изменениями.OnBindViewHolder метод я меняю цвет фона, чтобы выбрать цвет, если позиция в настоящее время выбрана позиция и черный, если нет.
В деятельности я использовал адаптер, как это,
RecyclerView view = findViewById(R.id.view);
ArrayList<String> list = new ArrayList<>();
for(int i = 100; i < 150; i++) {
list.add(Integer.toString(i));
}
TestAdapter adaptor = new TestAdapter(this, list);
adaptor.setOnItemClickListener(new TestAdapter.OnItemClickListener() {
@Override
public void onItemClick(View viewItem, int position) {
//Your item click code
}
});
view.setAdapter(adaptor);
LinearLayoutManager liveImageLayoutManager = new LinearLayoutManager(getApplicationContext());
liveImageLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
view.setLayoutManager(liveImageLayoutManager);
Я надеюсь,Вы можете взглянуть на это и адаптировать, как это делается в вашем коде.