Gleb Glazyrin
Gleb Glazyrin

Reputation: 87

onOptionsItemSelected is not called in PopupMenu

I am trying to open popup menu when pressing one of the elements of the Dialog Fragment, but onOptionsItemSelected method is never called, even when pressing one of the menu items. What should I do to fix it?

enter image description here enter image description here

public class AddSongDialogFragment extends DialogFragment implements View.OnClickListener {

private TextView genreTextview;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.addsong_layout, container);
    //...
    genreTextview = (TextView) view.findViewById(R.id.genreTextView);
    view.findViewById(R.id.ll_genre_menu).setOnClickListener(this);
    genreTextview.setText(R.string.press_to_choose_genre);
    return view;
}

//...

public void onClick(View v){
    switch(v.getId()) {
        case R.id.button2:
            dismiss();
            mListener.onChoose();
            break;
        case R.id.ll_genre_menu:
            PopupMenu popup = new PopupMenu(getContext(), v);
            MenuInflater inflater = popup.getMenuInflater();
            inflater.inflate(R.menu.song_genres, popup.getMenu());
            popup.show();
            break;
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    genreTextview.setText(item.getTitle());
    Log.d("songo", "item selected");
    return true;
}

song_genres.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/pop"
        android:title="@string/pop"/>
    <item android:id="@+id/rock"
        android:title="@string/rock" />
    ...
</menu>

Upvotes: 1

Views: 648

Answers (1)

vmtrue
vmtrue

Reputation: 1774

You should set setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener) for popup

It will be like below

popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Log.d("songo", "item selected");
                return false;
            }
        });

Upvotes: 3

Related Questions