2010-05-06 2 views
3

У меня есть вид, который расширяет активность. ListView отобразит несколько списков. Когда пользователь долго щелкает, я хотел бы представить им контекстное меню, позволяющее им выбирать редактирование, удаление и т. Д., А затем идентифицировать список, который был выбран в качестве элемента для выполнения действия.идентификация идентификатора listitem для contextmenu

В OnCreate у меня есть:

listView.setAdapter(adapter); 
listView.setOnItemClickListener(onListClick); 
listView.setOnItemLongClickListener(onListLongClick); 
registerForContextMenu(listView); 

У меня есть метод onCreateContextMenu

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

} 

, а также onContextItemSelected

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    if (item.getTitle() == "Edit") { 
     // edit action 
    } else if (item.getTitle() == "Delete") { 
     // delete action 
    } else { 
     return false; 
    } 
    return true; 
} 

Я не уверен, куда идти сюда, чтобы получить правильный row/listitem.

ответ

5

Вы можете использовать AdapterContextMenuInfo пожалуйста, обратитесь Link-1 из кода вы предоставили,

public boolean onContextItemSelected(MenuItem item) { 

    if (item.getTitle() == "Edit") { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     editInfo(info.position); 
    } else if (item.getTitle() == "Delete") { 
     // TODO Delete action 
    } else { 
     return false; 
    } 

    return true; 
} 
+0

Великих, который работает, но это, как представляется, будет компенсировано один так вместо info.position я имеющим передать в (info.position + 1). Это ожидаемое поведение? – JDM