我有一个程序,显示通过内容提供商从数据库中提取的记录列表。
我在列表视图上的任何项目上按下长按时会显示一个内容菜单,可以选择删除该项目。
我想要做的是使用一个对话框 - 这样用户可以选择在删除之前用描述标记该项目。
以下是我的内容菜单的代码:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
showDialog(DIALOG_SAB_PRIORITY_ID);
menu.add(0, DELETE_ID, 0, "Returned Item - Remove");
}
选择项目时的代码:
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
Uri uri = Uri.parse(BorrowMeContentProvider.CONTENT_URI + "/"
+ info.id);
getContentResolver().delete(uri, null, null);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
我应该提一下,我要更改项目,以便不删除它,只标记为已返回。我的对话框如下:
protected Dialog onCreateDialog(int id) {
AlertDialog dialog;
switch (id) {
case DIALOG_SAB_PRIORITY_ID:
final CharSequence[] items = { "Good Condition", "Bad Condition" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Returned Item Condition:")
.setSingleChoiceItems(items, 0,
new DialogInterface.OnClickListener() {
// This is the listener that checks to see what
// radio button is clicked
public void onClick(DialogInterface dialog,
int item) {
// Toast.makeText(getApplicationContext(),
// Integer.toString(item),
// Toast.LENGTH_SHORT).show();
if (item == 0) {
// If item returned in good condition
goodBadSwitch = false;
} else if (item == 1) {
// If item is returned in bad condition
goodBadSwitch = true;
}
}
})
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
// This is the listener for the button to
// dismiss the dialog box
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
});
dialog = builder.create();
break;
default:
dialog = null;
}
return dialog;
}
到目前为止,所有这些代码都是在对话框后调用菜单。我只想让对话框取代菜单。
由于
答案 0 :(得分:0)
如果您想摆脱菜单上下文,那么您可以将对话框的调用移动到列表视图onListItemClick
侦听器,如下所示:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// other code...
showDialog(DIALOG_SAB_PRIORITY_ID);
// other code...
}