3

我有一个带有删除和类似选项的“经典”上下文菜单的 ListView。由于我从 SharedPreferences 对象中删除,我需要检索键,即设置到 ListView 项目中的文本。

我试过以下代码:

    @Override
    public boolean onContextItemSelected(MenuItem item){
        AdapterContextMenuInfo saved = (AdapterContextMenuInfo) item.getMenuInfo();

        TextView view = (TextView)findViewById((int) saved.id);

        Log.d("DEBUG:", "before key");
        String key = view.getText().toString();
        Log.d("DEBUG:", "after...");

        switch (item.getItemId()){
            case R.id.conmenu_delete:
                return true;

            case R.id.conmenu_copy:
                return true;

            case R.id.conmenu_send:
                return true;

            default:
                return super.onContextItemSelected(item);
        }
    }

但是,不幸的是,它在尝试从视图中检索文本时崩溃,正如我从日志中知道的那样。

4

2 回答 2

11

您已经正确地投射了AdapterContextMenuInfo.
从那里,您可以获得可以再次投射到小部件中的 targetView。我想这是TextView你的情况。在那TextView你可以调用简单的getText()方法。

@Override
public boolean onContextItemSelected(MenuItem item) {

           AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
           String key = ((TextView) info.targetView).getText().toString();

           switch (item.getItemId()){
                case R.id.conmenu_delete:
                    return true;

                case R.id.conmenu_copy:
                    return true;

                case R.id.conmenu_send:
                    return true;

                default:
                    return super.onContextItemSelected(item);
          }
}

如果您的列表填充了自定义对象,您显然必须将其转换为相应的类型,例如:

Person person = (Person) getListAdapter().getItem(info.position);
String key = person.getName();
于 2013-01-14T23:40:19.603 回答
1
 @Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    Object obj = getListView().getItemAtPosition(info.position);
    String title = obj.toString();



}
于 2015-10-11T17:09:21.803 回答