【发布时间】:2019-12-26 21:08:37
【问题描述】:
我正在使用调用与数据库交互的后端 API 的弹出菜单为我的 ReyclerView 实现取消和启用功能。 API 工作正常。但是,这些函数会更新列表中的最后一项,而不是选定的一项。我该怎么办?
我尝试从模型定义中获取 ID,但也失败了。它返回最后一个项目的 Id。
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
// 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 应该转发 Item Id 和预期的变化;作为激活的 1 和取消的 2,到后端 API。在此处输入图像描述
【问题讨论】:
标签: android android-studio listview android-recyclerview