Android открывается контекстное меню после нажатия кнопки - PullRequest
21 голосов
/ 13 апреля 2011

Я хочу открыть контекстное меню, когда я нажимаю кнопку, но также я должен знать, какой элемент списка находится при нажатии на кнопку.Ты знаешь как это сделать?Какой код должен быть в onclick методе?

Ответы [ 4 ]

59 голосов
/ 26 мая 2011

Я искал то же самое и обнаружил, что вместо контекстного меню вы должны использовать диалоги

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

25 голосов
/ 05 мая 2012

Если вы действительно хотите сделать это по какой-либо причине ... (в моем случае, из-за лени)

Во время 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);
}

это работает, потому что View v совпадает с представлением, зарегистрированным для контекстного меню.

4 голосов
/ 13 апреля 2011

Прежде всего, вы должны зарегистрировать представление, вызвав registerForContextMenu (представление представления) . Во-вторых, переопределите onCreateContextMenu () , чтобы добавить меню, и, наконец, переопределите onContextItemSelected () , чтобы поместить логику в каждое меню.

1 голос
/ 13 апреля 2011

Прежде всего, вы должны знать, почему вы должны использовать ContextMenu. Функциональность ContextMenu представления аналогична контекстному меню на ПК, что означает «доступные операции» для некоторого элемента.

Согласно вашему описанию, я думаю, что вам на самом деле нужен настраиваемый диалог со списком , который отображается при нажатии кнопки, а также может получить выделенный элемент вашего ListView. Тогда вы можете сохранить регистрацию ContextMenu для некоторого View, который действительно нуждается в меню:)

...