2014-02-11 2 views
0

Я пытаюсь создать контекстное меню, которое появляется, когда я держу палец (длинный) на изображении в виде сетки.Показать контекстное меню на 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 Для ContextMenu внутри OnCreate().

как этот

registerForContextMenu(imageGrid); 

затем называют как этот

Edit:

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

Это еще не отображалось в меню. – user1480139

+0

Теперь см. Обновленный ответ –

+0

Спасибо, но OnItemLongClickListener не может быть разрешен, потому что я расширяюсь из Fragment. – 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() делает трюк.

Смежные вопросы