Android registerForContextMenu 在Activity之外注册

3
我想在适配器中的视图上单击时使用上下文菜单。问题是,每个视图的OnClick都在一个不是Activity的类中[它是一个扩展BaseAdapter的类],在public View getView(final int position, View convertView, ViewGroup parent)内部。
因此,当我尝试在仅扩展BaseAdapter的这个类中创建上下文菜单或使用registerForContextMenu注册时,这是不可能的。
所以问题是:OnClick在这个非Activity类中。是否可以给这个类一个参数,使其能够启动上下文菜单?

问题已解决: 在“不是活动的类”内部,我正在使用AlertDialog。为了使用它,我将使用此类的活动上下文作为参数。因此,可以在此不是Activity的类中向用户显示选项列表。为此,需要使用:Looper.prepare(); ab.show(); Looper.loop();为不是活动的类创建处理程序。 - Cavina
2个回答

2
我想在适配器中的视图上单击时使用上下文菜单。
最好不要这样做。您可以在用户长按AdapterView中的项目时使用上下文菜单。 这是演示此功能的示例项目。
其他任何事情(例如,在单击适配器中的视图时弹出某些内容)应该是AlertDialog,如@coder_For_Life22所建议的那样。
因此,当我尝试在仅扩展BaseAdapter的类中创建上下文菜单或使用registerForContextMenu进行注册时,这是不可能的。
您只调用一次registerForContextMenu(),为AdapterView调用它。 在您调用setContentView()并因此创建AdapterView之后,您可以从activity的onCreate()中执行此操作。
其他任何内容都应该是AlertDialog。
是否可以给此类提供一个参数,以允许它启动上下文菜单?
你不需要“为这个类提供一个参数,以便它可以启动上下文菜单”,因为你只需要一次调用registerForContextMenu(),针对AdapterView
其余的应该是一个AlertDialog。你可以在Adapter中添加一个构造函数,该构造函数需要一个Activity作为参数,Adapter将持有并用于AlertDialog。或者,如果AdapterActivity的内部类,则只需使用MyActivityName.this来引用Activity

实际上,我有一个带有ButtonAdapter的GridView。我这样做: adapter = new ButtonAdapter(this.getApplicationContext, 50, 50); 然后在扩展BaseAdapter的类中,我包含图像并为每个图像设置onclick... 我希望此单击打开上下文菜单[或AlertDialog],允许对此特定图像执行特定操作... - Cavina

2
您可以使用AlertDialog来实现此功能。
它的实现大致如下:
gridview.setOnItemLongClickListener(new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id)
    {
        showOptionsMenu(position);
        return true;
    }

});

public void showOptionsMenu(int position)
{
new AlertDialog.Builder(this)
.setTitle("test").setCancelable(true).setItems(R.array.myOptions,
          new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialoginterface, int i) {
                   //take actions here according to what the user has selected
               }
         }
)
.show();
}

我在Faces.class中,使用BaseAdapter构造了一个网格。当我点击网格中的图像时,在继承BaseAdapter的类中查找onClickListener,并且应该在Faces.class中打开菜单...因此我不能简单地启动新活动... - Cavina
但是警告对话框必须在Activity中,对吗? 没有其他方法可以为BaseAdapter类[每个ImageButton的单击侦听器]提供视图或其他允许其显示为对话框界面的东西吗? - Cavina
试一下吧。这是我偶然发现的一个解决方案。 - coder_For_Life22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接