Подтвердить что ты не робот

Открытие контекстного меню Android после нажатия кнопки

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Во время 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 совпадает с представлением, зарегистрированным для контекстного меню.

Ответ 3

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

Ответ 4

Прежде всего, вы должны знать, почему вы должны использовать ContextMenu. Функциональность ContextMenu в представлении аналогична меню правой кнопки мыши на ПК, что означает "доступные операции" на каком-либо элементе.

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