使用Multi-select recyclerview将所选项目传递给另一个活动

时间:2016-10-04 03:47:39

标签: android android-intent android-recyclerview multi-select

我尝试做的是获取所选项目,然后使用工具栏将其传递给下一个活动的意图值。我应该如何让我的工具栏菜单知道它想要获得什么数据。请帮忙

适配器onBindViewHolder()

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;
                }
            }
});

我的工具栏

declare @SearchTerm nvarchar(1) = '@'
select substring(Email, charindex(@SearchTerm, Email) + 1, len(Email)) as [Email Domain],
count(Email) as Total 
from tblResident 
group by substring(Email, charindex(@SearchTerm, Email) + 1, len(Email))

2 个答案:

答案 0 :(得分:2)

您可以在适配器类中维护数据结构,以便继续添加所选项目。

我猜你的工具栏在你的活动或片段中,希望有一个适配器的引用,它可以访问这个数据结构,然后在意图中传递它。

我使用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循环并将项添加到arrayList中。

可以在intent中将arrayList设置为extra,并且可以从getSerializableExtra()方法在目标活动中检索。

另一方面,您可以使用position而不是viewHolder.position

答案 1 :(得分:0)

  1. 在适配器中创建方法:

    public ArrayList<Item> getSelectedItems() {
        ArrayList<Item> selectedItems = new ArrayList<>();
        for( Item item : items ) {
           if( item.isSelect() )
              selectedItems.add(item);
           }
           return selectedItems;
        }
    
  2. 确保您的模型类Item实现可序列化或可分割的

  3. 在工具栏菜单中,单击侦听器代码:

  4. >      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;
    >                }
    >               }
    >             });