2014-02-11 99 views
0

我正尝试创建一个上下文菜单,当我在GridView中的图像上按住我的手指(长)时弹出。在imagegridview上显示上下文菜单

现在在创建GridView的我已经做了这个片段:

的OnCreate:

imageGrid.setAdapter(ImageAdapter); 

哪里ImageAdapter是我独立的类,它的工作对我来说。

而且在同一个片段我有

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     if(item.getTitle()=="Action1"){ 
      Log.d("Debug","Clicked"); 
     } 
     else { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Context Menu"); 
     menu.add(0, v.getId(), 0, "Action 1"); 
     menu.add(0, v.getId(), 0, "Action 2"); 
    } 

然后在我的适配器类我注册这样的longOnclickListener:

private class selectOnLongClickListener implements View.OnLongClickListener{ 
    private ViewHolder mViewHolder; 

private selectOnLongClickListener(ViewHolder viewHolder) 
{ 
    mViewHolder = viewHolder; 
} 

@Override 
public boolean onLongClick(View v) 
{ 
    Log.d("Debug","OnLongClick"); 
    return true; 
} 

} 

监听器的工作原理,他打印了我调试输出时我把手指放在一张图像上。但上下文菜单从不显示。难道我做错了什么?

回答

0

不要ü尝试在活动称之为

this.openContextMenu(...); 

@Override 
public boolean onLongClick(View v) 
{ 
    Log.d("Debug","OnLongClick"); 

    YourActivity.this.openContextMenu(v); 
    return true; 
} 
+0

我正在使用片段,我需要做getActivity()。this.openContextMenu(v)? – user1480139

+0

是的,就是这样,getActivity()。openContextMenu(v) –

+0

我不能使用它,因为我的适配器类从baseAdapter扩展,所以我不能使用getActivity()。 – user1480139

0

尝试使用grid.setOnItemLongClickListener(listener);

0

注册你的GridView对于文本菜单里面OnCreate()

这样

registerForContextMenu(imageGrid); 

然后调用这样

编辑:

@Override 
public boolean onLongClick(View v) 
{ 
    Log.d("Debug", "OnLongClick"); 
    v.showContextMenu(); 
    return true; 
} 
+0

这还是菜单没有显示。 – user1480139

+0

现在看到更新的答案 –

+0

谢谢,但OnItemLongClickListener无法解析,因为我从片段扩展。 – user1480139

0

这是修改后的监听器。

private class selectOnLongClickListener implements View.OnLongClickListener{ 
    private ViewHolder mViewHolder; 

    private selectOnLongClickListener(ViewHolder viewHolder) 
    { 
     mViewHolder = viewHolder; 
    } 

    @Override 
    public boolean onLongClick(View v) 
    { 
     Log.d("Debug", "OnLongClick"); 
     v.showContextMenu(); 
     return true; 
    } 
} 

v.showContextMenu()可以做到这一点。