当前位置: 首页 > 知识库问答 >
问题:

ReyclerView项目Android Studio的弹出菜单功能

葛炜
2023-03-14

我试图从模型定义中获取Id,但也失败了。它返回了最后一项的Id。

public void onBindViewHolder(最终的recycerview.viewholder,int位置){

    // Get current position of item in recyclerview to bind data and assign values from list
    final MyHolder myHolder= (MyHolder) holder;
    current = dataErrand.get(position);
    myHolder.service.setText(current.errandservice);
    myHolder.date.setText("Date: " + current.erranddate);
    myHolder.time.setText("Time: " + current.errandtime);
    myHolder.phone.setText("Phone: " + current.errandphone);
    myHolder.location.setText("Location: " + current.errandlocation);
    myHolder.status.setText("status: " + current.errandstatus);
    myHolder.id.setText("Id: "+current.getErrandid());
    myHolder.options.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(context, myHolder.options);
            popup.inflate(R.menu.errand_options);
            Menu popMenu = popup.getMenu();
            if(current.errandstatus == "Active"){
                popMenu.findItem(R.id.errand_reactivate).setVisible(false);
                popMenu.findItem(R.id.errand_cancel).setVisible(true);
            }
            if (current.errandstatus == "Canceled"){
                popMenu.findItem(R.id.errand_cancel).setVisible(false);
                popMenu.findItem(R.id.errand_reactivate).setVisible(true);
            }
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    int menuId = item.getItemId();
                        if(menuId == R.id.errand_cancel){
                            //handle menu1 click
                            //return true;
                            Toast.makeText(context, " "+current.getErrandid(), Toast.LENGTH_LONG).show();
                            changeStatus = new ChangeStatus(context);
                            isChanged = changeStatus.makeChange(current.errandid,0 );
                            if(isChanged == true){
                                current.errandstatus = "Canceled";
                                myHolder.status.setText("status: " + current.errandstatus);
                            }
                            //return true;
                        }
                        if(menuId ==R.id.errand_reactivate){
                            Toast.makeText(context, " "+current.getErrandid(), Toast.LENGTH_LONG).show();
                            changeStatus = new ChangeStatus(context);
                            isChanged = changeStatus.makeChange(current.errandid, 1);
                            if(isChanged == true){
                                current.errandstatus = "Active";
                                myHolder.status.setText("status: " + current.errandstatus);
                            }
                            //return  true;
                        }
                    return false;
                }
            });
            popup.show();
        }
    });

OnMenuItemClick应该转发项目Id和预期的更改;作为激活的1和取消的2,到后端api。在这里输入图像描述

共有1个答案

卓雅达
2023-03-14

您的当前变量将在每次onbindviewholder调用时被重写。您应该将id存储在ViewHolder中,例如:

    holder.options.setTag(position);

然后检索onclick方法中的位置,例如:

    int pos = (int) v.getTag(); 

希望能有所帮助。

 类似资料:
  • 我有一个弹出窗口,其中包含不同种类的内容,分为几个部分,点击一个按钮就会触发。我试图在此实现中公开适当的可访问性/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

  • 本文向大家介绍Vue弹出菜单功能的实现代码,包括了Vue弹出菜单功能的实现代码的使用技巧和注意事项,需要的朋友参考一下 言归正传 我们老样子直接先上效果图再开始今天的分享 这个项目的github可以看一看 组件分析 界面组成 逻辑分析 最终实现 界面组成 从上图中,我们可以看出界面主要分为menu和item2块,其中menu的动画是自传,item的动画是位移,然后这里我们通过绝对布局的方式将整个控

  • 弹出菜单是可触发的、上下文叠加显示链接列表和别的内容。它们可以与Bootstrap内置的弹出菜单JavaScript插件交互。它通过点击触发,而不是通过鼠标悬停悬浮。这是一个故意设计决策。 示例 把弹出菜单的触发器以及弹出菜单包裹在一个.dropdown中,或者其它声明了position:relative;的元素中。然后,添加菜单的HTML。 <div class="dropdown open">

  • 使用任何按钮都可以触发一个弹出菜单,只需要把它放置在一个.btn-group中,并提供适当的弹出菜单标记。 插件依赖 按钮弹出菜单需要你的Bootstrap中调用了弹出菜单插件。 内容 单按钮弹出菜单 通过一些基本的标记变化,将一个按钮变成一个弹出菜单。 <!-- Single button --> <div class="btn-group"> <button type="button"

  • 我有RecyclerView和信息旁边的每个项目都有一个按钮,三个点代表一个弹出菜单。当用户点击该按钮时,弹出菜单将显示更多信息。项目的某些部分变得可见。我不能使用一次性回收工具,我必须用这个。但问题是,当我点击它时,它只会展开和折叠我的RecyclerView上的最后一个项目,而不是点击的项目。我试过这样做:为RecyclerView项目创建选项菜单,并结合其他解决方案。我的代码就是基于这个问题