我想为膨胀的视图显示上下文菜单。这是代码示例:
for grid_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:antialias="true" />
现在我在我的活动课程中使用它:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select action");
menu.add(0, 1, 0, "Action1");
menu.add(0, 2, 0, "Action2");
super.onCreateContextMenu(menu, v, menuInfo);
}
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView imageView = (ImageView) inflater.inflate(R.layout.grid_layout, null);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerForContextMenu(v);
openContextMenu(v);
}
});
此代码运行时没有任何错误,但单击imageView时不显示上下文菜单。这段代码有什么问题吗?
答案 0 :(得分:4)
我找到了针对这种情况的解决方法并解决了我的问题。 正如我所说,相同的代码工作正常并显示ContextMenu,如果我在我在setContentView()方法中设置的XML中定义ImageView。我只是使用该imageView的对象来注册contextMenu并在点击膨胀项目时显示ContextMenu。以下是示例代码:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select action");
menu.add(0, 1, 0, "Action1");
menu.add(0, 2, 0, "Action2");
super.onCreateContextMenu(menu, v, menuInfo);
}
ImageView imageViewInContext = (ImageView) findViewById(R.id.imageview_in_main_xml);
registerForContextMenu(imageViewInContext);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView imageView = (ImageView) inflater.inflate(R.layout.grid_layout, null);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openContextMenu(imageViewInContext);
}
});
希望这会对某人有所帮助!
答案 1 :(得分:1)
添加您的代码:
imageView.setFocusable(true);
imageView.setClickable(true);
之后,Imageview将获得clickEvent。
答案 2 :(得分:0)
因为您正在创建一个匿名内部类(通过执行new View.OnClickListener
),所以您不再在UI线程(您的Activity类)中操作,因此当您想要{{1}时,不会加载上下文菜单}和registerForContextMenu
。您可以使用openContextMenu
向UI线程(您的Activity类)发送消息来执行这些操作,或者尝试在内部类中引用您的Activity类。像这样:
Handler