Java 弹出菜单没有膨胀
如何使用OnMenuItemClickListeners创建自定义弹出菜单类?我似乎找不到任何这样的答案,使用一个单独的类这样做。他们都在他们的活动中这样做,但我想要一个单独的弹出菜单类 我尝试过创建它: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
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();