Jak se vám realizovat kontextovou nabídku v ListActivity o Androidu?

hlasů
39

Jak implementovat kontextové menu vyvolané dlouhým kliknutím nebo kohoutem na ListActivity který používá vestavěný rozložení a ListAdapter?

Položena 11/01/2009 v 22:32
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
73

Na OnCreate metoda volání registerForContextMenu , jako je tento:

registerForContextMenu(getListView());

a pak naplnit nabídku na onCreateContextMenu (menu ContextMenu, Výhled názor, ContextMenuInfo menuInfo) . Argument menuInfo může poskytnout informace o tom, které položka byla dlouholetou klepnutí tímto způsobem:

AdapterView.AdapterContextMenuInfo info;
try {
    info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return;
}
long id = getListAdapter().getItemId(info.position);

a přidání položky nabídky obvyklým způsobem volání menu.add :

menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string);

a když uživatel vybere možnost, onContextItemSelected se nazývá. Také onMenuItemSelected a tento fakt není explicitně vysvětleno v dokumentaci s výjimkou říci, že použijete jinou metodu přijímat hovory z kontextové nabídky; prostě být vědomi, nesdílejí IDS.

Na onContextItemSelected můžete sehnat na MenuInfo a tím id položky vybrány voláním getMenuInfo () :

try {
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return false;
}
long id = getListAdapter().getItemId(info.position);
Odpovězeno 12/01/2009 v 21:09
zdroj uživatelem

hlasů
14

Měli byste se také podívat na Activity.registerForContextMenu (View) .

Odpovězeno 13/01/2009 v 08:15
zdroj uživatelem

hlasů
5
listView = (ListView) findViewById(R.id.listpockets);
registerForContextMenu(listView);



public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) {
    //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(getString(R.string.titleDelete));   
    menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete));
};
@Override
public boolean onContextItemSelected(MenuItem item) {

    if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID)
    {
       AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
       long id = this.listView.getItemIdAtPosition(info.position);
       Log.d(TAG, "Item ID at POSITION:"+id);
    }
    else
    {
        return false;
    }
    return true;
}
Odpovězeno 30/12/2011 v 22:20
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more