Настройка ContextMenu в SetOnLongClickListener

Как я могу настроить свое приложение для отображения контекстного меню в Long Click Listener? Я хочу, чтобы при нажатии для воспроизведения звука и при длительном нажатии отображалось меню с некоторыми параметрами и кнопками на 1 той же кнопке. Итак, я хочу, чтобы обычный щелчок воспроизводил звук, при длительном нажатии отображалось меню с некоторыми кнопками, которые я могу использовать для установки в качестве мелодии звонка и других вещей.

mp=MediaPlayer.create(this, R.raw.hekler);

ImageButton btn1 = (ImageButton) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {


    if (mp2.isPlaying()){
        mp2.pause();
        mp2.seekTo(0);
    }

    else{
        mp.start();
    }

}

});

btn1.setOnLongClickListener(new OnLongClickListener() {
    public boolean onLongClick(View arg0) {       
        return true;
    }
});

person Slim C.    schedule 13.01.2014    source источник


Ответы (1)


Чтобы отобразить контекстное меню при длительном нажатии, вы должны вызвать registerForContextMenu(View) для просмотра, по которому щелкнули.

Вы также должны переопределить onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)

Вам не нужно setOnLongClickListener. Если вам это нужно по какой-то другой причине, он должен вернуть false.

В вашем коде:

ImageButton btn1 = (ImageButton) findViewById(R.id.btn1);
registerForContextMenu(btn1);

btn1.setOnClickListener(new View.OnClickListener() {

    -------------
    -------------

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.your_context_menu, menu);
}

Для работы с контекстным меню:

@Override
public boolean onContextItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.contextItem1:
            //Do what you want
        return true;

        case R.id.contextItem2:
            //Do what you want
        return true;

        default:
            return super.onContextItemSelected(item);
    }
}
person ramaral    schedule 13.01.2014