我有RecyclerView和信息旁边的每个项目都有一个按钮,三个点代表一个弹出菜单。当用户点击该按钮时,弹出菜单将显示更多信息。项目的某些部分变得可见。我不能使用一次性回收工具,我必须用这个。但问题是,当我点击它时,它只会展开和折叠我的RecyclerView上的最后一个项目,而不是点击的项目。我试过这样做:为RecyclerView项目创建选项菜单,并结合其他解决方案。我的代码就是基于这个问题编写的。
我的代码:
@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();
});
}
编辑我的整个适配器类:'
public class CashAccAdapter extends RecyclerView.Adapter<CashAccAdapter.AccountsHolder> {
private List<AccountsModel> list;
private Context context;
private boolean isExpanded;
private Group group;
//SparseBooleanArrays map integers to booleans.
private SparseBooleanArray expandedList = new SparseBooleanArray();
public CashAccAdapter(List<AccountsModel> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public AccountsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
ItemDetailedListAssetsBinding binding = ItemDetailedListAssetsBinding.inflate(layoutInflater, parent, false);
group = binding.group;
return new AccountsHolder(binding);
}
@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 (expandedList[position]) {
collapse(group);
expandedList[position] = false;
} else {
expandedList [position]= true;
expand(group);
}
} else {
return false;
}
return true;
});
//displaying the popup
popup.show();
});
}
@Override
public int getItemCount() {
return list != null ? list.size() : 0;
}
class AccountsHolder extends RecyclerView.ViewHolder {
private ItemDetailedListAssetsBinding binding;
public AccountsHolder(@NonNull ItemDetailedListAssetsBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(final AccountsModel modelClass) {
binding.setListAssets(modelClass);
binding.executePendingBindings();
binding.accNameValueTV.setText(modelClass.getAccName());
binding.accTypeValueTV.setText(modelClass.getAccType());
binding.accCurentValueTV.setText("$" + modelClass.getCurrentValue());
binding.accNumberValueTV.setText(modelClass.getAccNumber());
}
}
}
`
声明名为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
变量。因此,请尝试上面的代码。祝你好运
我试图从模型定义中获取Id,但也失败了。它返回了最后一项的Id。 public void onBindViewHolder(最终的recycerview.viewholder,int位置){ OnMenuItemClick应该转发项目Id和预期的更改;作为激活的1和取消的2,到后端api。在这里输入图像描述
我有popupMenu和CheckBox。我需要将状态CheckBox写入布尔。此代码不工作: 这是错误: 致命的例外:主java。com上的lang.NullPointerException。亚历克斯。救命啊。根系活力。android上的OnOptions ItemSelected(RootsActivity.java:182)。应用程序。活动com上的onMenuItemSelected(Ac
如何创建一个选项菜单,如以下屏幕截图: 点击RecyclerView项目的“更多”图标后,应打开选项菜单! 我的尝试是这样的: 但这会导致问题,因为如果我点击RecyclerView item More按钮,则会单击完整项目。。。 这是我的RecyclerViewOnTouchListener: 我没有发现任何类似的问题,所以我希望你能帮助我!
我有一个弹出窗口,其中包含不同种类的内容,分为几个部分,点击一个按钮就会触发。我试图在此实现中公开适当的可访问性/aria语义。(它不是一个模式对话框,而是一个简单的就地弹出窗口)。根据我目前的研究,我认为这是有意义的: 触发按钮上的咏叹调展开 在触发按钮上 其他可选键盘可访问性 此菜单按钮实现示例:https://www.w3.org/TR/wai-aria-practices/examples
mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" class="mui-popover"> <ul class="mui-table-view"> <li class="mui-table-view-cell"><a href="#">Item1</a></li
这是我现在面临的一个奇怪的问题。从我的应用程序中,我从JSON文件中从链接中获取数据,然后用Volley解析它。现在我想在一个看起来不起作用的RecyclerView上显示数据,我很高兴我的代码很好,但是有些东西似乎不起作用,我找不到它。 这是活动代码 HomeActivity.java: 这是我从适配器中扩展的布局,并从JSON文件中设置数据 和适配器类相关的代码,我猜: @Override p