2014-01-04 4 views
0

У меня есть GridView:Контекстное меню в GridView Android

GridView gridView = (GridView) findViewById(R.id.grid_view); 

// Instance of ImageAdapter Class 
final String [] imageNames = {"knee_kg","knee_ks","knee_kp","knee_kg_90", 
           "pipe_knee", "cover", "funnel", "crater"}; 
Integer[] mThumbIds = new Integer[imageNames.length]; 
for (int i = 0; i<imageNames.length; i++){ 
    Integer resID = getResources().getIdentifier(imageNames[i], "drawable", 
               getPackageName()); 
    mThumbIds[i] = resID; 
} 

и OnItemCliclListener:

gridView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { 
     Class clazz = null; 
     String className = imageNameToUpper(imageNames[position]); 

     try { 
      clazz = Class.forName("com.example.pipecalculator.activities." + className); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Intent intentClass = new Intent(getApplicationContext(), clazz); 
     startActivity(intentClass); 
    } 
}); 

Я хочу создать только два элемента мыши контекстное меню: "knee_ks", "knee_kp". С другой стороны должно быть:

Intent intentClass = new Intent(getApplicationContext(), clazz); 
startActivity(intentClass); 

Это возможно?

ответ

1

Это возможно.
Вы должны использовать int position:

gridView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

        if (position == 0 || position == 2 /*and other, or just: position < 5*/) 
        { 
         //Code for positio 0 and 2 
        } 
        else 
        { 
         //Code for othe positions 
        } 
       } 
      }); 

Использование this example для отображения контекстного меню.

+0

Я хочу создать контекстное меню только для позиции 0 и 2 – Johny0987

+0

Так оно и есть. –

+0

Я не понимаю, теперь это похоже на то, что при нажатии на позицию 0 или 2 открытое имя clazz изменилось. – Johny0987

2

Первый Зарегистрируйте свой GridView для контекстного меню

registerForContextMenu(grid); 

, а затем переопределить функцию

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    getMenuInflater().inflate(R.menu.context_menu, menu); 
    GridView gv = (GridView) v; 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
    int position = info.position; 
      if(!(position==0 || position==2)) 
      { 
      menu.close(); 
      ) 
} 

Контекстное меню Слушатель

 @Override 
public boolean onContextItemSelected(MenuItem item) { 
    return true;    
     } 
+0

Это не работает, меню отображается на каждой позиции. – Johny0987

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