如何从 ContextMenu 中引用选定的 ListView 项目?
How to reference selected ListView item from ContextMenu?
我在显示帐户列表视图的 activity 中实施了上下文操作栏 (CAB)。目前,通过 CAB 的唯一选择是删除帐户。但是,当用户长按一个帐户并选择删除项目时,我无法弄清楚如何获取对所选帐户的引用。这是点击监听器代码:
mAccountListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (mActionMode != null) {
return false;
} else {
// Start the CAB using the ActionMode.Callback already defined
mActionMode = startSupportActionMode(mActionModeCallback);
// Get name to set as title for action bar
Account account = (Account) mAccountAdapter.getItem(position);
mActionMode.setTitle(account.getName());
mAccountListView.setSelection(position);
return true;
}
}
});
这是 onItemClicked:
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete_account:
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
在 mode.finish()
以上的第二个函数中,我想从数据库中删除帐户以及适配器。但是,我不知道如何引用它。我试过:
Account acc = (Account) mAccountListView.getSelectedItem();
但是我得到一个空值的帐户。我也尝试过使用 AdapterContextMenuInfo,但在调用 item.getInfo()
时我也得到了一个空对象。我在其他地方犯了错误吗?我不想求助于存储每次选择项目时都会更改的静态变量。
您可以 set the tag 在 ActionMode 上传递帐户引用。
稍后使用
Account acc = (Account) mode.getTag();
我在显示帐户列表视图的 activity 中实施了上下文操作栏 (CAB)。目前,通过 CAB 的唯一选择是删除帐户。但是,当用户长按一个帐户并选择删除项目时,我无法弄清楚如何获取对所选帐户的引用。这是点击监听器代码:
mAccountListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (mActionMode != null) {
return false;
} else {
// Start the CAB using the ActionMode.Callback already defined
mActionMode = startSupportActionMode(mActionModeCallback);
// Get name to set as title for action bar
Account account = (Account) mAccountAdapter.getItem(position);
mActionMode.setTitle(account.getName());
mAccountListView.setSelection(position);
return true;
}
}
});
这是 onItemClicked:
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete_account:
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
在 mode.finish()
以上的第二个函数中,我想从数据库中删除帐户以及适配器。但是,我不知道如何引用它。我试过:
Account acc = (Account) mAccountListView.getSelectedItem();
但是我得到一个空值的帐户。我也尝试过使用 AdapterContextMenuInfo,但在调用 item.getInfo()
时我也得到了一个空对象。我在其他地方犯了错误吗?我不想求助于存储每次选择项目时都会更改的静态变量。
您可以 set the tag 在 ActionMode 上传递帐户引用。
稍后使用
Account acc = (Account) mode.getTag();