2010-05-18 17 views
5

Il menu di scelta rapida non appare sul lungo clic sugli elementi dell'elenco nella visualizzazione elenco. Ho esteso l'adattatore di base e ho utilizzato un supporto per visualizzare l'elenco personalizzato con le visualizzazioni di testo e un pulsante image.ContextMenu non appare a lungo. Fare clic su

adapter = new MyClickableListAdapter(this, R.layout.timeline, mObjectList); 
     list.setAdapter(adapter); 
     registerForContextMenu(list); 

Attuazione onCreateContextMenu

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
    ContextMenuInfo menuInfo) { 
    // TODO Auto-generated method stub 
    super.onCreateContextMenu(menu, v, menuInfo); 

    Log.d(TAG, "Entering Context Menu"); 

    menu.setHeaderTitle("Context Menu"); 

    menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") 
    .setIcon(R.drawable.icon); 
} 

L'XML per ListView è qui

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 

Ho cercato per molti giorni. Penso che sia impossibile registrare il menu di scelta rapida per una vista elenco personalizzata come questa. Correggimi se ho torto (possibilmente con codice di esempio).

Ora sto pensando di aggiungere un pulsante alla voce di elenco e visualizza un menu facendo clic su di esso. È possibile con qualche altro modo rispetto all'utilizzo di Dialoghi?

Qualsiasi aiuto sarebbe molto apprezzato ..

risposta

5

Perché non hai usato ListActivity?

Nel mio ListActivity ho:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /* setContentView() and all stuff that happens in this method */ 
    registerForContextMenu(getListView()); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterView.AdapterContextMenuInfo info; 
    try { 
     info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    } catch (ClassCastException e) { 
     Log.e(TAG, "bad menuInfo", e); 
    return; 
    } 

    Something something = (Subway) getListAdapter().getItem(info.position); 
    menu.setHeaderTitle(something.getName()); 
    menu.setHeaderIcon(something.getIcon()); 
    menu.add(0, CONTEXT_MENU_SHARE, 0, "Do something!"); 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info; 
    try { 
     info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    } catch (ClassCastException e) { 
     Log.e(TAG, "bad menuInfo", e); 
     return false; 
    } 

    switch (item.getItemId()) { 
     case DO_SOMETHING: 
      /* Do sothing with the id */ 
      Something something = getListAdapter().getItem(info.position); 
      return true; 
    } 
+0

Grazie. Devo provare questo codice. – primpap

+0

@Macarse è questo per una pressione prolungata? – likejiujitsu

2

Usa OnItemLongClickListener metodo (tramite il set ~) del ListView.

+0

Ho provato ad utilizzare OnItemLongClickListener sul ListView. Si è rotto. – primpap

+0

@primal: si è bloccato con un 'StackOverflowException' giusto? – Macarse

+0

No. Qualche altro errore. Non ricordo di averlo saputo. L'ho sostituito con un lungo clic su una vista testuale e ho visualizzato una finestra di dialogo con butttons. Serve allo scopo. – primpap

8

Tale problema si pone nella visualizzazione elenco quando ha elementi focusable come casella di controllo, radioButton, ecc. Per risolvere questo nel layout per la voce di elenco per le voci focusable includono:

android:focusable="false"; 
Problemi correlati