Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Multi-select recyclerview将所选项目传递给其他活动_Android_Android Intent_Android Recyclerview_Multi Select - Fatal编程技术网

Android 使用Multi-select recyclerview将所选项目传递给其他活动

Android 使用Multi-select recyclerview将所选项目传递给其他活动,android,android-intent,android-recyclerview,multi-select,Android,Android Intent,Android Recyclerview,Multi Select,我试图做的是获取所选项目,然后使用工具栏将其传递给下一个活动的意图值。如何使工具栏菜单知道它试图获取的数据。请帮忙 适配器onBindViewHolder() 我的工具栏 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem arg0) {

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

适配器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;
                }
            }
});

您可以在适配器类中维护一个数据结构,以不断添加所选项目

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

我会用斯巴雷。因此,在适配器中,执行如下操作

SparseArray itemsArray=新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中

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

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

  • 在适配器中创建一个方法:


    从您的changeStatusListener获取项目列表,并将其作为捆绑值传递给您。对于错误的代码编辑,我的浏览器出现故障,因此我无法以正确的方式对其进行格式化。我正在使用serializable。顺便说一句,我得到的结果是com.project.sample.model。Items@43ds2aba. 这是为什么?您需要重写模型类中的toString()方法以获得正确的名称,您得到的是该类的原始哈希代码。
    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);
    }}
    
    public ArrayList<Item> getSelectedItems() {
        ArrayList<Item> selectedItems = new ArrayList<>();
        for( Item item : items ) {
           if( item.isSelect() )
              selectedItems.add(item);
           }
           return selectedItems;
        }
    
    >      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;
    >                }
    >               }
    >             });