PopupMenu не появляется при нажатии - PullRequest
1 голос
/ 16 июня 2020

У меня есть этот ImageButton, который находится внутри Items моего Recyclerview и который обычно должен вызывать method showPopup onclick. Мой план состоял в том, что при нажатии на этот Imagebutton будет PopupMenu, из которого вы можете либо переименовать элемент, либо удалить его. Но, к сожалению, все работает не так, как должно. Я ценю любую помощь.

<ImageButton
            android:id="@+id/img_btn_more"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_marginEnd="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/white"
            android:src="@drawable/ic_more"
            android:onClick="showPopup"/>
public void showPopup(View v){
        PopupMenu popup=new PopupMenu(MyApplication.getAppContext(),v);
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.item1: Toast.makeText(MyApplication.getAppContext()," Random text1",Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.item2: Toast.makeText(MyApplication.getAppContext()," Random text2",Toast.LENGTH_SHORT).show();
                        return true;
                    default: return false;
                }
            }
        });
        popup.inflate(R.menu.popup_menu);
        popup.show();
    }

1 Ответ

1 голос
/ 17 июня 2020

Если вы находитесь в RecyclerView, вам нужно будет сделать это внутри ViewHolder и передать контекст, который вы получите при создании RecyclerViewAdapter

holder.*your_image_view*.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
        PopupMenu popup=new PopupMenu(mContext,v);
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            switch (menuItem.getItemId()){
                case R.id.item1: Toast.makeText(mContext," Random text1",Toast.LENGTH_SHORT).show();
                    return true;
                case R.id.item2: Toast.makeText(mContext," Random text2",Toast.LENGTH_SHORT).show();
                    return true;
                default: return false;
            }
        }
    });
    popup.inflate(R.menu.popup_menu);
    popup.show();
    }
});
...