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 に答える