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

我正在使用一个弹出式菜单为我的ReyclerView实现取消和启用功能,该菜单调用一个与数据库交互的后端应用程序接口。API工作正常。但是,这些函数会更新列表中的最后一项,而不是所选的项。我该怎么做呢?

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

public void onBindViewHolder(最终RecyclerView.ViewHolder持有者,整型位置){

    // 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和预期的更改转发给后端API.enter镜像描述

转载请注明出处:http://www.owntest.net/article/20230526/2513771.html