RecyclerView中的弹出菜单在其他项目中起作用

问题描述

我有RecyclerView,每个信息旁边都有一个带有三个点的按钮,代表一个弹出菜单。当用户单击该按钮时,弹出菜单显示更多信息。部分项目变得可见。我不能使用消耗性的RecyclerView我必须用这个。但是问题是,当我单击它时,它会展开并折叠,而我的RecyclerView上的最后一项不是单击的。 我尝试了此操作:Create Options Menu for RecyclerView-Item,并结合了其他解决方案,我的代码就是基于这个SO问题。

我的代码:

import win32ui,win32con
multi_line_string = [line1,line2,line3,line4,line5,line6,line7,line8] # My text to print line by line
fontdata = {'name': 'Arial','weight': win32con.FW_NORMAL,'height': 60,'width': 17}
hDC = win32ui.CreateDC()
hDC.CreatePrinterDC('myprinter')
font = win32ui.CreateFont(fontdata)
hDC.SelectObject(font)
hDC.StartDoc('alex')
hDC.StartPage()
for line in multi_line_string:
    hDC.TextOut(X,Y,line)          
    Y += Y_distance
hDC.EndPage()
hDC.EndDoc()

编辑我的整个适配器类:`

 @Override
    public void onBindViewHolder(@NonNull AccountsHolder holder,int position) {
        AccountsModel model = list.get(position);
        holder.bind(model);
        holder.binding.moreInfoIB.setOnClickListener(v -> {
            //creating a popup menu
            PopupMenu popup = new PopupMenu(context,v);
            //inflating menu from xml resource
            popup.inflate(R.menu.assets_more_info_menu);
            popup.setOnMenuItemClickListener(item -> {
                Log.i("ItemID: ",String.valueOf(item.getItemId()));
                if (item.getItemId() == R.id.item1) {
                    if (isExpanded) {
                        collapse(group);
                        isExpanded = false;

                    } else {
                        isExpanded = true;
                        expand(group);

                    }
                } else {
                    return false;
                }
                return true;
            });
            //displaying the popup
            popup.show();
        });

    }

`

解决方法

声明一个名为expandedList的SparseBooleanArray并将其更改为

popup.setOnMenuItemClickListener(item -> {
                Log.i("ItemID: ",String.valueOf(item.getItemId()));
                if (item.getItemId() == R.id.item1) {
                    if (expanded.get(position)) {
                        collapse(group);
                        expandedList.put(position,false);
                    } else {
                        expandedList.put(position,true);
                        expand(group);
                    }
                    this.notifyItemChanged(position);
                } else {
                    return false;
                }
                return true;
            });

仅最后一项会更改,因为您使用的是单个isExpanded变量。因此,请尝试上面的代码。祝好运。 :)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...