Android registerForContextMenu出了一个Activity

时间:2011-12-21 18:30:12

标签: android contextmenu

当用户点击适配器内的视图时,我想使用上下文菜单。问题是每个视图的OnClick都在一个不是活动的类[它是一个扩展BaseAdapter的类],在公共视图getView(最终int位置,View convertView,ViewGroup父级)中。

因此,当我尝试创建上下文菜单或在此类中仅使用扩展BaseAdapter的registerForContextMenu注册时,它是不可能的。

所以问题是:onclick在这个Not Activity类中。是否可以为这个类提供一个允许它启动上下文菜单的参数?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

  

当用户点击适配器内的视图时,我想使用上下文菜单。

希望不是。当用户长按AdapterView中的项目时,您可以使用上下文菜单。 Here is a sample project证明了这一点。

其他任何内容(例如,当用户点击适配器内的视图时弹出某些内容)应为AlertDialog,如@ coder_For_Life22所示。

  

因此,当我尝试创建上下文菜单或在此类中注册只能扩展BaseAdapter的registerForContextMenu时,它是不可能的。

对于registerForContextMenu(),您只需拨打AdapterView一次。在您致电onCreate()并因此创建了setContentView()后,您可以在活动的AdapterView执行此操作。

其他任何内容都应该是AlertDialog

  

是否可以为此类提供允许其启动上下文菜单的参数?

您不应该“为此类提供允许其启动上下文菜单的参数”,因为您只需registerForContextMenu()一次AdapterView

其他任何内容都应该是AlertDialog。您可以在Adapter上添加一个构造函数,该构造函数将Activity作为参数,Adapter保留并用于AlertDialog。或者,如果AdapterActivity的内部类,则只需使用MyActivityName.this来引用Activity