【发布时间】:2012-05-04 15:04:28
【问题描述】:
我需要通过长按选择来访问 ListView 项中的文本。对于旧的 Android 版本,我已经使用下面的代码使用上下文菜单成功地完成了这项工作。
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
String text = ((TextView) info.targetView).getText().toString();
switch (item.getItemId()) {
case R.id.getText:
getText(text);
return true;
default:
return super.onContextItemSelected(item);
}
}
但是,对于较新的 Android 版本,我想使用上下文操作栏执行此操作,但在选择栏中的项目后无法弄清楚如何提取所选文本。下面的代码不起作用。
myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
myListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
String text = ((TextView) info.targetView).getText().toString();
switch (item.getItemId()) {
case R.id.contextDelete:
getText(text);
return true;;
default:
return false;
}
}
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
//Other actionmode methods...
});
上下文操作栏显示正常,但是当从中选择一个项目时,我在 AdapterContextMenuInfo 行收到 NullPointerException,因为这显然是为上下文菜单而不是操作栏制作的。也许对于动作栏有一些等价物吗?或者在这种情况下如何获取 ListView 项目文本?谢谢。
【问题讨论】:
标签: android android-listview android-menu android-actionbar