Android从上下文菜单上的自定义 ListView 中获取选定的文本

标签 android listview android-listview

如果您长按该项目,我有一个带有上下文菜单的自定义 ListView 。我想做的是从 ListView 项中获取选定的文本并将其传递给上下文菜单。我怎样才能做到这一点?

这是我到目前为止尝试过的:

private String selectedWord = null;
private long selectedWordId = -1L;

private void initControls(View rootView) {
   lv = (ListView) rootView.findViewById(R.id.listView1);

   registerForContextMenu(lv);

}

@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {

    AdapterView.AdapterContextMenuInfo info =
            (AdapterView.AdapterContextMenuInfo) menuInfo;
    selectedWord = ((TextView) info.targetView).getText().toString();
    selectedWordId = info.id;

    /*
      if (view.getId()==R.id.listView1) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle("Nothing");
      */ 

        String[] menuItems = getResources().getStringArray(R.array.context_menu);
        for (int i = 0; i < menuItems.length; i++) {
            menu.add(Menu.NONE, i, i, menuItems[i]);
        }

     // } 

}

@Override
public boolean onContextItemSelected(MenuItem item) {

      AdapterView.AdapterContextMenuInfo 
            info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
      int menuItemIndex = item.getItemId();
      String[] menuItems = getResources().getStringArray(R.array.context_menu);
      String menuItemName = menuItems[menuItemIndex];

      // To get the id of selected item from custom listview
      long id = adapter.getItemId(info.position);


      Log.e("TESTS", "" + id);

      if(menuItemName.equals(getString(R.string.action_view))) {

          /*Intent i = new Intent(getActivity(), OrdinanceViewActivity.class);
          i.putExtra("Ordinance ID", ordinance_id);
          Log.e("I'm Here!", "" + ordinance_id);
          startActivity(i);  */

      } else {
         // adapter.remove(adapter.getItem(info.position));
      }


      return true;

}

class CustomAdapter extends CursorAdapter  {

    LayoutInflater inflater;
    @SuppressWarnings("deprecation")
    public CustomAdapter(Context context, Cursor c) {
        super(context, c);
        inflater = LayoutInflater.from(context);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {


        tvOrdinance = (TextView) view.findViewById(R.id.tvOrdinance);
        tvID = (TextView) view.findViewById(R.id.tvID);
        tvCategory = (TextView) view.findViewById(R.id.tvCategory);

        tvID.setText(cursor.getString(
                cursor.getColumnIndex(DBHelper.KEY_ID)));
        tvCategory.setText(cursor.getString(
                cursor.getColumnIndex(DBHelper.KEY_CATEGORY_NAME)));
        tvOrdinance.setText(cursor.getString(
                cursor.getColumnIndex(DBHelper.KEY_ORDINANCE_TITLE)));

    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return inflater.inflate(R.layout.list_bookmarks_item, parent, false);
     }

}

但是我在这一行中得到了一个 ClassCastException:

selectedWord = ((TextView) info.targetView).getText().toString();

我做错了什么?任何帮助,将不胜感激。谢谢。

最佳答案

我想,你必须更换

selectedWord = ((TextView) info.targetView).getText().toString();

selectedWord = ((TextView)info.targetView.findViewById(R.id.YOUR_TEXTVIEW_ID)).getText().toString();

关于Android从上下文菜单上的自定义 ListView 中获取选定的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324257/

相关文章:

在 Mac 上的 Android 中创建数据报套接字时出现 java.net.BindException

android - 如何以编程方式获取Android项目中支持的语言列表(NOT设备)

android - 如何删除 ListView 中的边框?

android - 滚动时 ListView 崩溃 "The application may be doing too much work on its main thread."

java - 在 android 中使用复选框在 ListView 中显示 toast 消息

android - 我应该将 onClickListener 放在自定义 ListView 的什么位置?

用于许多额外详细信息的 Android 表单

android - 如何编辑我的 mysql 数据库?

android - 如何知道从可扩展 ListView 中选中了哪个复选框并获取其信息(Android)

android - 禁用拉动加载以刷新 ListView