如何解决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
变量。因此,请尝试上面的代码。祝好运。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。