web-dev-qa-db-ja.com

Androidボタンをクリックした後にコンテキストメニューを開く

ボタンをクリックしたときにコンテキストメニューを開きたいのですが、ボタンをクリックしたときにどのリストアイテムがフォーカスされているかを知る必要もあります。それを行う方法を知っていますか? onclickメソッドにはどのコードを含める必要がありますか?

20
Mustafa İrer

私は同じものを探していて、コンテキストメニューの代わりにダイアログを使用する必要があることがわかりました

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
alert.show();

http://developer.Android.com/guide/topics/ui/dialogs.html#AlertDialog

59
dikirill

もしあなたが本当に何らかの理由でそれをしたいなら...(私の場合、怠惰のうち)

アクティビティのonCreateの間、またはユーザーがボタンに触れる前のどこかで、そのボタンに対してregisterForContextMenuを実行します。次に、実際のボタンのonClickハンドラーでopenContextMenu(View)を呼び出します。

たとえば、私はボタンをxmlで宣言しています

<Button
    Android:id="@+id/btn_help"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:onClick="onHelp"
    Android:text="@string/help_btn_text" />

私のonCreateで

registerForContextMenu(findViewById(R.id.btn_help));

およびonHelp関数

public void onHelp(View v) {
    openContextMenu(v);
}

これは、ビューvがコンテキストメニューに登録されているビューと同じであるため機能します。

25
Yenchi

まず、registerForContextMenu(View view)を呼び出してビューを登録する必要があります。次に、onCreateContextMenu()をオーバーライドしてメニューを追加し、最後にonContextItemSelected()をオーバーライドして各メニューにロジックを配置します。

4
exception01

まず、ContextMenuを使用する理由を知っておく必要があります。ビューのContextMenuの機能は、PCの右クリックメニューに似ています。これは、一部の項目で「使用可能な操作」を意味します。

あなたの説明によると、実際に必要なのはリスト付きのカスタマイズされたダイアログであり、ボタンをクリックすると表示され、ListViewのフォーカスされたアイテムを取得することもできると思います。次に、本当にメニューを必要とするビューのContextMenuの登録を保存できます:)

1
shihpeng