Intereting Posts
Как сделать изображение gif двумя растровыми изображениями в android AlarmManager не работает должным образом Студия Android: предупреждение, когда я пытаюсь переместить класс в другой пакет Ошибка рейтинга содержимого консоли разработчика Как управлять состоянием приложения в Android (для разработчика iPhone) Проверка ввода адреса в Android Как изменить значок приложения для Android, созданного в Google App Inventor? Ресурсы для Android: как загружаются растровые изображения из ресурсов, обработанных памятью? Как выбрать несколько изображений из галереи в Android? Как добавить прозрачность элемента внутри RecyclerView, когда он не соответствует границе списка? Android SDK и AVD Manager -Cant создать AVD в правильном месте файла Как отлаживать приложение для Android от «adb shell am start -D»? Показывать только две цифры после десятичной Eclipse дает эту ошибку: «Не удалось создать представление: com.android.ide.eclipse.ddms.views.LogCatView» ANDROID: добавление пустого пространства в конец списка ListView

Как реализовать мульти-выбор в RecyclerView?

Это реализовано с помощью ListView

ListView имел режим множественного выбора, что я должен использовать для его реализации с помощью RecyclerView? Как обращаться с onItemCheckedStateChanged? Я проверил это , но я не мог многое понять. Любой фрагмент кода или примерный проект, реализующий его, будет отличным. Заранее спасибо.

Solutions Collecting From Web of "Как реализовать мульти-выбор в RecyclerView?"

Я знаю, что немного поздно ответить на этот вопрос. И я не знаю, соответствует ли он требованиям OP или нет. Но это может кому-то помочь. Я реализовал этот многоэкранный RectyclerView с простым трюком. Вот мой код.

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#EEE"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> 

item_row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:background="#FFF" android:clickable="true" android:orientation="vertical"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" tools:text="TextView" /> </LinearLayout> 1 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:background="#FFF" android:clickable="true" android:orientation="vertical"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" tools:text="TextView" /> </LinearLayout> 

В item_row.xml android:clickable="true" важно.

MainActivity.java

 public class MainActivity extends AppCompatActivity { private List<Model> mModelList; private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mAdapter = new RecyclerViewAdapter(getListData()); LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(manager); mRecyclerView.setAdapter(mAdapter); } private List<Model> getListData() { mModelList = new ArrayList<>(); for (int i = 1; i <= 25; i++) { modelList.add(new Model("TextView " + i)); } return mModelList; } } 

Model.java

 public class Model { private String text; private boolean isSelected = false; public Model(String text) { this.text = text; } public String getText() { return text; } public void setSelected(boolean selected) { isSelected = selected; } public boolean isSelected() { return isSelected; } } 

RecyclerViewAdapter.java

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private List<Model> mModelList; public RecyclerViewAdapter(List<Model> modelList) { mModelList = modelList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { final Model model = mModelList.get(position); holder.textView.setText(model.getText()); holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE); holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { model.setSelected(!model.isSelected()); holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE); } }); } @Override public int getItemCount() { return mModelList == null ? 0 : mModelList.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private View view; private TextView textView; private MyViewHolder(View itemView) { super(itemView); view = itemView; textView = (TextView) itemView.findViewById(R.id.text_view); } } } 

Как это работает? onBindViewHolder() связывает данные из массива ArrayList для просмотра объектов. Таким образом, вовремя привязывая данные к представлению, он получает единственный объект из ArrayList, который является Model model = mModelList.get(position); С текущей позицией. Теперь нам нужно проверить, выбран ли этот конкретный объект или нет. Как это,

 model.isSelected() 

Который возвращает либо true либо false . Если этот объект уже выбран, нам нужно изменить цвет row_item выбранного row_item . Для этого вот код

 holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE); 

Если он выбран, измените цвет фона на cyan white .

Для выбора нам нужно использовать setOnClickListener() . (Здесь я использую только TextView . Поэтому я выполняю событие click на TextView ). Здесь holder.view означает весь item_row . Onclick переключает логические значения на true или false .

  holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { model.setSelected(!model.isSelected()); holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE); } }); 

В вашей деятельности или фрагменте, на котором размещается RecyclerView, вы можете получить выбранные объекты / элементы, подобные этому

 String text = ""; for (Model model : mModelList) { if (model.isSelected()) { text += model.getText(); } } Log.d("TAG","Output : " + text); 

Вот вывод

вывод

Надеюсь, это будет полезно.

 public class RecyclerColorAdapter extends RecyclerView.Adapter<RecyclerColorAdapter.ViewHolder> { private final Activity activity; private final ArrayList<ColorItem> itemArrayList; public RecyclerColorAdapter(Activity activity, ArrayList<ColorItem> itemArrayList) { super(); this.activity = activity; this.itemArrayList = itemArrayList; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_color_recycleview, viewGroup, false); return new ViewHolder(v); } @Override public void onBindViewHolder(final ViewHolder holder, final int i) { holder.setIsRecyclable(true); final ColorItem colorItem = itemArrayList.get(i); holder.button_color.setText(colorItem.getColorName()); holder.button_color.setBackgroundColor(colorItem.isSelected() ? Color.CYAN : Color.WHITE); holder.button_color.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { colorItem.setSelected(!colorItem.isSelected()); holder.button_color.setBackgroundColor(colorItem.isSelected() ? Color.CYAN : Color.WHITE); if (colorItem.isSelected()){ arrayListColor.add("diamond_color[]="+colorItem.getValue()+"&"); Log.e("arrayListColor","---------"+arrayListColor); } else { arrayListColor.remove("diamond_color[]="+colorItem.getValue()+"&"); Log.e("arrayListColor","---------"+arrayListColor); } } }); } @Override public int getItemCount() { return itemArrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private Button button_color; public ViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); button_color = (Button) itemView.findViewById(R.id.button_color); } @Override public void onClick(View v) { } } }