2010-05-18 8 views
5

El menú contextual no aparece en el clic largo en los elementos de la lista en la vista de lista. Amplié el adaptador base y usé un titular de vista para implementar la lista personalizada con textviews y un botón de imagen.ContextMenu no aparece en Clic largo

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

Implementación de 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); 
} 

El XML para la vista de lista es aquí

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

He estado tratando de esto por muchos días. Creo que es imposible registrar el menú contextual para una vista de lista personalizada como esta. Corrígeme si estoy equivocado (posiblemente con un código de muestra).

Ahora estoy pensando en agregar un botón al elemento de la lista y se muestra un menú al hacer clic en él. ¿Es posible con alguna otra forma que no sea usar Diálogos?

Cualquier ayuda sería muy apreciada ..

Respuesta

5

¿Por qué no usaste ListActivity?

En mi ListActivity que tengo: surge

@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

Gracias. Tengo que probar este código. – primpap

+0

@Macarse es esto para la prensa larga? – likejiujitsu

2

Uso método (a través del conjunto ~) de la ListView OnItemLongClickListener.

+0

Intenté usar OnItemLongClickListener en la vista de lista. Se estrelló. – primpap

+0

@primal: se bloqueó con un 'StackOverflowException' ¿verdad? – Macarse

+0

No. Algún otro error. No recuerdo saber. Lo reemplacé con un clic largo en una vista de texto y se mostró un diálogo con botones. Sirve para el propósito. – primpap

8

Tal problema en la vista de lista cuando tiene artículos enfocable como casilla de verificación, radioButton, etc. Para resolver esto, en el diseño del elemento de la lista para los elementos enfocables se incluyen:

android:focusable="false";