0

То, что я пытаюсь сделать, это получить выбранные элементы, а затем передать их с помощью панели инструментов для значений цели для следующего действия. Как мне настроить меню панели инструментов, какие данные он пытается получить. Пожалуйста, помогитеИспользование Multi-select recyclerview для передачи выбранных элементов в другую активность

Adapter onBindViewHolder()

@Override 
    public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, int position) { 

     viewHolder.view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Item item = items.get(viewHolder.position); 
       if(item.isSelect()){ 
        item.setSelect(false); 
       } else { 
        item.setSelect(true); 
       } 
       items.set(viewHolder.position, item); 
       if(changeStatusListener != null){ 
        changeStatusListener.onItemChangeListener(viewHolder.position, item); 

       } 
       notifyItemChanged(viewHolder.position); 
      } 
     }); 


     try { 
      Item item= items.get(position); 
      if(item!= null){ 
       viewHolder.name.setText(category.getItem()); 
       viewHolder.imageView.setImageResource(category.getImage()); 
       viewHolder.position = position; 

       if(item.isSelect()) { 
        viewHolder.view.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary)); 
       } 
       else viewHolder.view.setBackgroundResource(R.drawable.item_selector); 
      } 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

Моя панель

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 

      @Override 
      public boolean onMenuItemClick(MenuItem arg0) { 
       switch (arg0.getItemId()) { 
        case R.id.save: 
         Intent intent = new Intent(getApplicationContext(), NextActivity.class); 
         startActivity(intent); 
        default: 
         return false; 
       } 
      } 
}); 
+0

получить список элементов из changeStatusListener и передать его как расслоение значение с намерением – Jai

ответ

1

Вы можете сохранить структуру данных в классе адаптера, чтобы добавлять выбранные элементы.

Я предполагаю, что ваша панель инструментов находится в вашей деятельности или фрагменте, который, надеюсь, имеет ссылку на адаптер, который может получить доступ к этой структуре данных, а затем передать его в намерении.

Я бы использовал SparseArray. Итак, в вашем адаптере сделайте что-то вроде следующего:

SparseArray itemsArray = new SparseArray <>();

в вашем onBindViewHolder методе

if(item.isSelect()) { 
    viewHolder.view.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary)); 
    if (itemsArray.get(position) != item) { 
     itemsArray.put(position, item); 
    }} else { 
viewHolder.view.setBackgroundResource(R.drawable.item_selector); 
if (itemsArray.get(position) == item) { 
    itemsArray.put(position, item); 
}} 

Теперь от вашей деятельности или фрагмента использовать ссылку адаптер для доступа к переменной itemsArray. Запустите цикл for и добавьте элементы в массивList.

Элемент arrayList может быть установлен как дополнительный в намерении и может быть извлечен в вашей целевой активности из метода getSerializableExtra().

На другой ноте, вы можете использовать позицию вместо viewHolder.position

0
  1. Создать метод в адаптер:

    public ArrayList<Item> getSelectedItems() { 
        ArrayList<Item> selectedItems = new ArrayList<>(); 
        for(Item item : items) { 
         if(item.isSelect()) 
          selectedItems.add(item); 
         } 
         return selectedItems; 
        } 
    
  2. Убедитесь, что ваша модель класса товар реализует сериализуемые или разборные

  3. В Ваше меню на панели инструментов код нажмите Слушатель:

>  toolbar.setOnMenuItemClickListener(new 
>   
>   Toolbar.OnMenuItemClickListener() { 
>    @Override 
>    public boolean onMenuItemClick(MenuItem arg0) { 
>    switch (arg0.getItemId()) { 
>    case R.id.save: 
>    
>  
>  Intent intent = new Intent(getApplicationContext(), NextActivity.class); 
>   intent.putSerializable("selectedItems", adapter.getSelectedItems()); // In case Item class is implementing 
> serializable 
> intent.putParcelableArrayListExtra("selectedItems",adapter.getSelectedItems()); // In 
> case you are using parcelable in your Item class 
>   startActivity(intent); 
>  
>    default: 
>    return false; 
>    } 
>    } 
>    }); 
+0

Извините о плохом редактировании кода, мой браузер действует до , из-за чего я не могу отформатировать его надлежащим образом. –

+0

Я использую serializable. Кстати, я получаю результат [email protected] почему это? –

+0

Вам необходимо переопределить метод toString() в классе модели, чтобы получить правильное имя, то, что вы получаете, является сырым хэш-кодом для этого класса. –

Смежные вопросы