Android: onListItemClick en la actividad

La anterior vez que hice una pregunta aquí aprendí mucho así que supongo que vale la pena intentarlo de nuevo.

Estoy usando la lista perezosa de Fedor desde este enlace: Carga perezosa de imágenes en ListView

Está funcionando como un encanto. PERO, Fedor está haciendo que su clase principal extienda Activity lugar de ListActivity . Debido a esto, ya no puedo utilizar un listItemClick oyente. Eclipse declara algunos errores alrededor de onListItemClick() . Funciona cuando doy la vuelta

  @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); // Intent launcher here } 

dentro

  protected void onListItemClick(ListView l, View v, int position, long id) { // Intent launcher here } 

Pero el lanzador de intenciones no funciona. Tampoco una notificación tostada.

Cuando cambio la Activity en una ListActivity , Eclipse no se tambalea, pero mi emulador me da una fuerza cercana.

Como lo consigo

  • O bien onListItemClick() haga clic en la actividad (preferible)
  • ¿O puedo transformar el código en una ListActivity sin fuerza cerca?

Muchas gracias por adelantado.

Estoy escribiendo mi respuesta como:

1) el código de @Falmarri necesita algunas actualizaciones
2) Mi edición sugerida fue totalmente rechazada XD
3) Stackoverflow no me está permitiendo escribir un comentario.

Aquí está el código:

 ListView listView = (ListView) findViewById(R.id.my_listview_in_layout); listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ //Do stuff //... } }); 

Referencia: De acuerdo con android.widget.AdapterView.OnItemClickListener , el método público onItemClick () es el método invocado cuando se hace clic en un elemento {en lugar de método desconocido onListItemClick () }

Un listItemClickListener está asociado a un ListView . Cuando cambió ListActivity a Activity , su clase ya no tiene una vista asociada con ella y por lo tanto una clase Activity no tiene idea de qué hacer con un onListItemClickListener.

Sólo tienes que adjuntar un oyente a tu ListView :

 listview.setOnItemClickListener(new OnItemClickListener(){ @Override protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){ //Do stuff } }); 

He estado trabajando en esto todo el día y después de hacer mi propio ArrayAdapter no pude averiguar cómo cambiar las clases en mi lista.

He aquí cómo descubrí cómo hacerlo. Después de que llamé a mi matriz simplemente terminé mi código en ese método haciendo.

 ListView lv =getListView(); lv.setOnItemClickListener(this); 

Entonces después de todo mi texto puse

 public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { String item = (String) getListAdapter().getItem(position); if (item.equals("Economy")) { Intent intent = new Intent(packages.this, economy.class); startActivity(intent); } else if (item.equals("Basic")) { Intent intent = new Intent(packages.this, basic.class); startActivity(intent); } else if (item.equals("Professional")) { Intent intent = new Intent(packages.this, professional.class); startActivity(intent); } else if (item.equals("Custom Applications")) { Intent intent = new Intent(packages.this, applications.class); startActivity(intent); } } 

Entre logré personalizar completamente mi ListView con fuentes y fondos personalizados. Estoy seguro de que un montón de tu no te importa. Pero estoy salido y estaba esperando publicando esto que podría ayudar a alguien en el futuro.

Para que una lista no ListActivity tenga un ListActivity -clicked-listener para un ListView , tiene que llamar a setOnItemClickedListener() en ListView (puede necesitarlo usando findViewById() si procede de XML)

En lugar de simplemente ListActivity onListItemClickListener() , aquí tendría su invocación Activity implementar AdapterView.onItemClickedListener() y pasarla como parámetro a setOnItemClickedListener() .

(Si lees el código fuente de ListActivity (lo recomiendo), verás que hace exactamente eso detrás de las escenas creando un objeto de escucha interno que llama a tu onListItemClick() ).

Si está utilizando ListActivity , quiere hacer algo como esto:

 public class YourClass extends ListActivity implements OnItemClickListener{ @Override public void onCreate(Bundle icicle){ super.onCreate(icicle); setContentView(R.layout.your_layout); getListView().setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // your stuff here } } 

Esta no es la única manera de establecer un OnItemClickListener . Mira otras respuestas. Esta es la forma en que me gusta hacerlo, ya que es más clara y fácil de leer.

FE.java

 package com.example.rfe; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class FE extends ListActivity { public List<String> d = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.file); d = new ArrayList<String>(); Scanner in = null; File f = new File("/sdcard/input.txt"); try { in = new Scanner(new FileReader(f)); while(in.hasNext()==true) { d.add(in.nextLine()); } }catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, d); setListAdapter(fileList); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { String selection = l.getItemAtPosition(position).toString(); Toast.makeText(this, selection, Toast.LENGTH_LONG).show(); super.onListItemClick(l, v, position, id); } } 

Supongamos que tiene el origen de datos Fruto contiene pocas cadenas. Puede definir el onCreate() siguiente manera:

 setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit, FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs 

Y luego escribe el onListItemClick() como sigue:

 protected void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(this, " You selected " + FRUITS[position], Toast.LENGTH_SHORT).show(); } 

Espero que te funcione 🙂

Simplemente he añadido el siguiente en onCreate() :

  listvview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { setPaymentDetails(); } }); 

Fuera de onCreate() agregó setPaymentDetails() :

 protected void setPaymentDetails() { Intent intent = new Intent(this, SetPaymentDetailsActivity.class); startActivity(intent); } 
  • Simple XML analiza XML a la lista
  • Android Uri to Filesize
  • Generar Java desde WSDL para usarlo en Android con el cliente SOAP ksoap2-android?
  • Patrón de diseño para acceder a los mismos datos de diferentes fuentes
  • Servicio o Thread o AsyncTask
  • Las referencias estáticas se borran - Android descarga clases en tiempo de ejecución si no se utiliza?
  • No se puede actualizar el widget android desde BroadcastReceiver
  • OpenCV para Android - NativeCameraView todavía existe?
  • Obtención de elementos secundarios de LinearLayout
  • Android: Descargar Object
  • Android: removeMessages (int what = 107) no está soportado antes de que WebViewCore esté configurado cuando url contenga http
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.