2010-03-16 16 views
30

Verilerle dolu bir liste görünümüm var.Android: İçerik menüsünden tıklanan konumu nasıl bulabilirim?

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    switch(item.getItemId()) 
    { 
    case 0: 
    ShowAlert("hello from delete item"); 
    break; 
    default: 
    return super.onContextItemSelected(item); 
    } 
    return true; 
} 

bu overrided yöntemde, nasıl bulabiliriz: Ben menuitem seçilen de contextmenu kontrol etmek için aşağıdaki yöntemi geçersiz kılma durumları

list.setOnCreateContextMenuListener 
(
    new View.OnCreateContextMenuListener() 
    { 
     public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) 
     { 
     AdapterContextMenuInfo mi =(AdapterContextMenuInfo) menuInfo; 
     menu.add(0, 0, 0, "Delete item");     
    } 
    } 
); 

: Aşağıdaki kodu kullanarak liste görünümü için bir bağlam menüsü kurmak tıklanan liste görünümünün öğesi nedir?

Şimdiden teşekkürler. Saygılarımızla. Jose

cevap

75

Sen ContextMenu.ContextMenuInfo kullanabilirsiniz. Böyle

şey:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    int index = info.position; 
    View view = info.targetView; 
} 
+0

Çok teşekkürler. Saygılarımızla. jose – Sosi

+1

Bilgi her zaman null durumdadır .. herkes yardımcı olabilir mi? Izgara görünümü kullanıyorum. –

+1

Sonunda çalışıyorum, "getContextMenuInfo()" yönteminin uygulanmadığı özel GridView kullanıyordum. Birinin bir örneğe ihtiyaç duyması halinde [burada] (http://vinaybhargav.wordpress.com/2014/07/20/android-floating-context-menu-for-listviewgridview/) gönderdim. –

3
private static final int EDIT_ID = Menu.FIRST + 3; 
private static final int DELETE_ID = Menu.FIRST + 4; 
@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenu.ContextMenuInfo menuInfo) { 
     menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
       'e'); 
     menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") 
       .setAlphabeticShortcut('d'); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     switch (item.getItemId()) { 
     case EDIT_ID: 

      edit(info.id); 
      return (true); 
     case DELETE_ID: 

      delete(info.id); 
      return (true); 
     } 

     return (super.onOptionsItemSelected(item)); 
    } 
+0

Çok teşekkürler. Saygılarımızla. Jose – Sosi

+0

Bunu geridönüşümle denedim ama çalışmıyor gibi görünüyor. herhangi bir geçici çözüm? –

0

Tamam, çözmek için sorun bilgisi boş **** kullanımını:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    int index = info.position; 
} 

Ayrıca, menü görüntülenmekte olduğu için kesin View alabilirsiniz Statik üye ve ayar değeri numaranızdan, longclick metodu üyesine değeri kaydetmek için: -

sizin bağlam seçilen madde

ve kullanım:

public override bool OnContextItemSelected(IMenuItem item) 
{ 
    switch (item.ItemId) 
    { 
     case 0: 
      return true; 
     case 1: 
      Toast.MakeText(this,CurrentPosition.Pos.ToString(), ToastLength.Long).Show(); 
      return true; 
     case 2: 
      Toast.MakeText(this, "Save", ToastLength.Long).Show(); 
      return true; 
     } 
     return true; 
    } 
} 

C# kodu

İlgili konular