Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹出菜单没有膨胀_Java_Android_Menu_Layout Inflater_Android Inflate - Fatal编程技术网

Java 弹出菜单没有膨胀

Java 弹出菜单没有膨胀,java,android,menu,layout-inflater,android-inflate,Java,Android,Menu,Layout Inflater,Android Inflate,如何使用OnMenuItemClickListeners创建自定义弹出菜单类?我似乎找不到任何这样的答案,使用一个单独的类这样做。他们都在他们的活动中这样做,但我想要一个单独的弹出菜单类 我尝试过创建它: public class AddPhotoMenu extends PopupMenu { public AddPhotoMenu(Context context, View anchor) { super(context, anchor); } @O

如何使用OnMenuItemClickListeners创建自定义弹出菜单类?我似乎找不到任何这样的答案,使用一个单独的类这样做。他们都在他们的活动中这样做,但我想要一个单独的弹出菜单类

我尝试过创建它:

public class AddPhotoMenu extends PopupMenu {
    public AddPhotoMenu(Context context, View anchor) {
        super(context, anchor);
    }

    @Override
    public void inflate(int menuRes) {
        super.inflate(R.menu.popup_menu_fragevent_addphotos);
    }

    @Override
    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
        new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.popup_menu_fragevent_takephoto:
                        //Inflate a layout
                        Log.d(TAG, "onMenuItemClick: Take photo");

                        break;
                    case R.id.popup_menu_fragevent_selectphotos:
                        //Inflate a layout

                        Log.d(TAG, "onMenuItemClick: Select photo");
                        break;

                }
                return false;
            }
        };
    }
但是菜单在我叫它的时候不会膨胀

 AddPhotoMenu addPhotoMenu = new AddPhotoMenu(this, mAddPhotosButton1);
 addPhotoMenu.show();

假设您有一个按钮,单击该按钮,弹出菜单将显示。按照此操作为自定义弹出菜单充气

Button btn = (Button) findViewById(R.id.btn);   
btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(MainActivity.this, v);
            popup.getMenuInflater().inflate(R.menu.popup_menu_fragevent_addphotos, popup.getMenu());

            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                    case R.id.popup_menu_fragevent_takephoto:
                        //Inflate a layout
                        Log.d(TAG, "onMenuItemClick: Take photo");

                        return true;
                    case R.id.popup_menu_fragevent_selectphotos:
                        //Inflate a layout

                        Log.d(TAG, "onMenuItemClick: Select photo");
                        return true;

                }
                return false;
                }
            });
            popup.show();//showing popup menu
        }
    });

请尝试下面的代码

public class AddPhotoMenu extends PopupMenu {
    public AddPhotoMenu(Context context, View anchor) {
        super(context, anchor);
   getMenuInflater().inflate(R.menu.popup_menu_fragevent_addphotos, getMenu());

    }



    @Override
    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
        new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.popup_menu_fragevent_takephoto:
                        //Inflate a layout
                        Log.d(TAG, "onMenuItemClick: Take photo");

                        break;
                    case R.id.popup_menu_fragevent_selectphotos:
                        //Inflate a layout

                        Log.d(TAG, "onMenuItemClick: Select photo");
                        break;

                }
                return false;
            }
        };
    }
尝试从构造函数中展开菜单布局,您不需要覆盖展开方法

您可以从活动/片段重写setOnMenuItemClickListener,并将其从自定义类中删除

 addPhotoMenu .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
           @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.popup_menu_fragevent_takephoto:
                        //Inflate a layout
                        Log.d(TAG, "onMenuItemClick: Take photo");

                        break;
                    case R.id.popup_menu_fragevent_selectphotos:
                        //Inflate a layout

                        Log.d(TAG, "onMenuItemClick: Select photo");
                        break;

                }
                return false;
            }
        };
我希望这对你有帮助

------------------------快乐编码--------------------

归功于:


您必须自己调用
充气()。它不会自动运行。您好,@david s。请尝试我的答案。你好@david s。请尝试我的答案,它可能对你有用。我怎么能在单独的课堂上做呢?现在我的问题是在覆盖setOnMenuItemClickListener之后,switch语句中的日志不起作用。您尝试过我的答案吗?有一件事在setOnMenuItemClickListener中没有返回true。请尝试一下我的答案,希望它能起作用。它能起作用,但我的问题是如何在一个单独的类中实现它。SeronMemItemClickListener没有被调用。我最终做了这个@davids。我的解决方案也适用于您。再看看这个
addPhotoMenu.inflate(R.menu.popup_menu_fragevent_addphotos);
addPhotoMenu.setOnMenuItemClickListener(addPhotoMenu); 
// Need to add this line otherwise it won't work.
addPhotoMenu.show();