2011-06-01 14 views

Respuesta

26

Es difícil saber lo que necesita lograr. Pero mi suposición es que desea realizar alguna acción sobre el elemento que recibe el clic largo. Para eso, tiene dos opciones:

.

listView.setOnItemLongClickListener (new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { 
    //do your stuff here 
    } 
}); 
+0

¿podría aclarar cómo asignar OnItemLongClickListener a mi ListView? Gracias de antemano. –

+0

@LA_ ver arriba. – Aleadam

+0

gracias, funciona perfectamente. ¿Cómo puedo obtener un valor de base de datos particular, asociado con el elemento al que se hace clic con mucho tiempo? Debería ser algo como 'this.getListAdapter(). GetItem (position)'? –

0

Agregue una vista personalizada personalizada View.OnLongClickListener a sus vistas. Puede ser compartido por muchos casos, a continuación, puede utilizar el parámetro de

onLongClick(View v) 

saber qué punto de vista se ha hecho clic y reaccionar en consecuencia.

Saludos, Stéphane

+0

Would funcionalidad de desplazamiento/aventura normal de este desastre de la ListView? –

+0

Extraño, pero tampoco funciona. Lo hago: 'public class BridgesCloseActivity extends ListActivity {... OnLongClickListener longClickListener; ... longClickListener = new OnLongClickListener() { \t public boolean onLongClick (Ver v) { \t \t Log.i ("", Integer.toString (v.getId())); \t \t return true; \t} }; ' –

+0

@LA_ Es posible que necesite que OnDown devuelva true. –

14

Normalmente, usted asocia un clic largo en una vista de lista con un menú contextual, que se puede hacer mediante el registro de la vista de lista con Activity.registerForContextMenu(View view) para dar una experiencia de interfaz de usuario más consistente con otra aplicaciones de Android.

y luego reemplazar el método onContextItemSelected en su aplicación como esta:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    listView = (ListView) findViewById(R.id.your_list_view); 
    registerForContextMenu(listView); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle(getString(R.string.menu_context_title)); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.your_context_menu, menu); 
} 

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

    switch (item.getItemId()) { 
    case R.id.some_item: 
     // do something useful 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 

La posición en la lista también se llevó a cabo en info.id

Si lo que desea es capturar el evento click de largo, entonces yo piensa lo que Snicolas está sugiriendo que funcionaría.

+0

no funciona. Parece que no tengo menú de contexto, nunca se llama a onContextItemSelected. –

+0

He actualizado el ejemplo de código. ¿Llamaste a 'registerForContextMenu (listView)'? Como han dicho otros, ¿está tratando de lograr algo cuando hace clic largo en el elemento o está tratando de obtener un menú contextual para el elemento en su vista de lista? –

+0

Estoy tratando de comenzar otra actividad, cuando se hace clic en el elemento por mucho tiempo. Por lo tanto, no es necesario mostrar el menú contextual. 'RegisterForContextMenu (listView)' está ahí. –

0
//Deleted individual cart items 
    //on list view cell long press 
    cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() { 
      @SuppressWarnings("rawtypes") 
     public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { 
       final CharSequence[] items = { "Delete" }; 

       AlertDialog.Builder builder = new AlertDialog.Builder(context); 

       builder.setTitle("Action:"); 
       builder.setItems(items, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int item) { 
         cart = cartList.get(position); 
         db.removeProductFromCart(context, cart); 

         new AlertDialog.Builder(context) 
         .setTitle(getString(R.string.success)) 
         .setMessage(getString(R.string.item_removed)) 
         .setPositiveButton("Done", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class); 
           startActivity(intent); 
          } 
         }) 
         .show(); 

        } 

       }); 

       AlertDialog alert = builder.create(); 

       alert.show(); 
      //do your stuff here 
       return false; 
      } 
     }); 
Cuestiones relacionadas