【发布时间】:2021-08-07 12:35:33
【问题描述】:
我有一个列表视图,其中包含 4 个对象。当我长按其中一个对象时,会打开一个带有“删除”选项的菜单,我可以删除该行。 但是,由于某种原因,我得到了错误的行 objetId,我无法弄清楚我做错了什么。
这就是我所做的:
创建上下文菜单:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
// Get the list
feedListView = (ListView)v;
// Get the list item position
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
int position = info.position;
position -= feedListView.getHeaderViewsCount();
int finalPosition = position;
if (ParseUser.getCurrentUser().getUsername().equals(data.getUserName())){
Log.e("Test","Same user + ObjectId = " + ((AdapterView.AdapterContextMenuInfo) menuInfo).position);
if (v.getId()==R.id.feedListView) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mymenu, menu);
}
}else{
Log.e("Test","Not Your Post");
Toast.makeText(this, "Its not your post", Toast.LENGTH_SHORT).show();
}
}
从上下文菜单中选择:
if (item.getItemId() == R.id.deleteMenu){
new AlertDialog.Builder(FeedActivity.this)
.setTitle("Are you sure ?")
.setMessage("Are you sure you want to delete this post?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Feed");
objects.get(finalPosition).deleteInBackground(new DeleteCallback() {
@Override
public void done(ParseException e) {
Log.e("Done","Item Deleted Successfully !!!");
arrayList.remove(finalPosition);
adapter.notifyDataSetChanged();
}
});
}
});
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
谢谢
【问题讨论】:
标签: java android listview parse-platform contextmenu