0

データベースとユーザー設定から入力されたエンティティに基づいてテキストを配置する TextViews で LinearLayout をプログラムで入力しています。

私は現在、これらの TextViews のそれぞれにコンテキスト メニューを追加して、ユーザーがその特定のエントリ (およびオブジェクト、したがって db 行) を削除できるようにしようとしています。

長押ししてコンテキストメニューを開くことはできますが、メニューに関連付けられている TextView の ID を取得する方法がわかりません。

これに関する事実上すべての情報は ListViews を参照しており (私は使用していません - ScrollView 内に ListView があると問題がありました)、多くの情報は Adapters を参照しています (私は使用していません。前にデータを徹底的にマッサージする必要があります)。見栄えがする)。

LinearLayout は XML で指定されます。DB ルックアップを行う AsyncTask の onPostExecute に TextViews を追加しています。

Activity.registerForContextMenu(TextView) と textView.setOnCreateOptionsMenuListener(new ...) の 2 つの方法でコンテキスト メニューを登録しようとしました。

問題は次の部分です。

@Override
public boolean onContextItemSelected(MenuItem item) {
    ContextMenuInfo info = (ContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.delete_entry:
              // how do I get the TextView id here???
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

ContextMenuInfo 変数は null であり、役に立ちません。

4

1 に答える 1

0

この質問に対する1つの答えは、oncontextitemselectedからgetviewidを読み取ることから得られました。

少しハッキーですが、機能します。今のところは問題ありません。

onCreateContextMenuメソッドのパラメーターとしてView変数を取得します。その場合、onContextItemSelectedメソッドで使用できるクラススコープを持つ他の変数にその変数を格納するのは簡単です。

例:

private TextView contextTextView = null;

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.tankbeurt_wissen, menu);
    contextTextView = (TextView) v;
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.delete_entry:
                System.out.println(contextTextView.getId()+" called this method");
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

これが私を助けたのと同じくらい誰かを助けてくれることを願っています。

于 2013-02-16T19:29:03.850 に答える