Android ListView con elementos onClick

Soy un nuevo programador y nuevo en Android. Estoy usando este ejemplo http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/ y funciona muy bien.

Ahora quiero hacer que los elementos (Dell, Samsung Galaxy S3, etc) para llamar a una función para abrir una nueva actividad con información diferente cada uno.

Por ejemplo:

Si toco Dell, una nueva actividad debe mostrarme información sobre Dell. Si toco a Samsung, lo mismo.

I Googled pero no podía encontrar nada útil, cualquier pista? Creo que esto es básico, pero soy nuevo, así que realmente no sé por dónde empezar

9 Solutions collect form web for “Android ListView con elementos onClick”

En su actividad, donde definió su lista

usted escribe

listview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?>adapter,View v, int position){ ItemClicked item = adapter.getItemAtPosition(position); Intent intent = new Intent(Activity.this,destinationActivity.class); //based on item add info to intent startActivity(intent); } }); 

En el adaptador getItem que escribe

 public ItemClicked getItem(int position){ return items.get(position); } 

Inicia nuevas actividades con intenciones. Un método para enviar datos a una intención es pasar una clase que implementa parcelable en la intención. Tome nota que está pasando una copia de la clase.

http://developer.android.com/reference/android/os/Parcelable.html

Aquí tengo un onItemClick. Creo la intención y ponerExtra una clase entera en la intención. La clase que estoy enviando ha implementado parcelable. Sugerencia: Sólo es necesario implementar el parseable sobre lo que es mínimamente necesario para volver a crear la clase. Es decir, un nombre de archivo o algo similar a una cadena, algo que un constructor puede usar para crear la clase. La nueva actividad puede obtener getExtras más tarde y es esencialmente crear una copia de la clase con su método constructor.

Aquí lanzo la clase kmlreader de mi aplicación cuando recibo un onclick en el listview.

Nota: debajo de resumen es una lista de la clase que estoy pasando así get (position) devuelve la clase infact es la misma lista que puebla el listview

 List<KmlSummary> summary = null; ... public final static String EXTRA_KMLSUMMARY = "com.gosylvester.bestrides.util.KmlSummary"; ... @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { lastshownitem = position; Intent intent = new Intent(context, KmlReader.class); intent.putExtra(ImageTextListViewActivity.EXTRA_KMLSUMMARY, summary.get(position)); startActivity(intent); } 

Más tarde en la nueva actividad sacar la clase parseable con

 kmlSummary = intent.getExtras().getParcelable( ImageTextListViewActivity.EXTRA_KMLSUMMARY); //note: //KmlSummary implements parcelable. //there is a constructor method for parcel in // and a overridden writetoparcel method // these are really easy to setup. public KmlSummary(Parcel in) { this._id = in.readInt(); this._description = in.readString(); this._name = in.readString(); this.set_bounds(in.readDouble(), in.readDouble(), in.readDouble(), in.readDouble()); this._resrawid = in.readInt(); this._resdrawableid = in.readInt(); this._pathstring = in.readString(); String s = in.readString(); this.set_isThumbCreated(Boolean.parseBoolean(s)); } @Override public void writeToParcel(Parcel arg0, int arg1) { arg0.writeInt(this._id); arg0.writeString(this._description); arg0.writeString(this._name); arg0.writeDouble(this.get_bounds().southwest.latitude); arg0.writeDouble(this.get_bounds().southwest.longitude); arg0.writeDouble(this.get_bounds().northeast.latitude); arg0.writeDouble(this.get_bounds().northeast.longitude); arg0.writeInt(this._resrawid); arg0.writeInt(this._resdrawableid); arg0.writeString(this.get_pathstring()); String s = Boolean.toString(this.isThumbCreated()); arg0.writeString(s); } 

Buena suerte Danny117

Definitivamente debe extender ArrayListAdapter e implementar esto en su método getView() . El segundo parámetro (una View ) debe ser inflado si su valor es null , aprovecharlo y ponerlo un onClickListener() justo después de inflar.

Suponiendo que se llama su segundo getView() se llama convertView :

 convertView.setOnClickListener(new View.OnClickListener() { public void onClick(final View v) { if (isSamsung) { final Intent intent = new Intent(this, SamsungInfo.class); startActivity(intent); } else if (...) { ... } } } 

Si quieres información sobre cómo extender ArrayListAdapter , te recomiendo este enlace .

Bien en su onitemClick usted enviará el valor seleccionado como deal , y enviarlo en su intención al abrir una nueva actividad y en su nueva actividad obtener los datos enviados y relacionados con el elemento seleccionado mostrará sus datos

Para obtener el nombre de la list

 String item = yourData.get(position).getName(); 

Establecer los datos en la intención

 intent.putExtra("Key", item); 

Para obtener los datos en la segunda actividad

 getIntent().getExtras().getString("Key") 
 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent i = new Intent(getActivity(), DiscussAddValu.class); startActivity(i); } }); 
 listview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?>adapter,View v, int position){ Intent intent; switch(position){ case 0: intent = new Intent(Activity.this,firstActivity.class); break; case 1: intent = new Intent(Activity.this,secondActivity.class); break; case 2: intent = new Intent(Activity.this,thirdActivity.class); break; //add more if you have more items in listview //0 is the first item 1 second and so on... } startActivity(intent); } }); 

Para qué tipo de Infierno implementando Parcelable?

Él está pasando a la cadena del adaptador [] así que

  • Get item (String) en la posición
  • Crear intención
  • Ponerlo como extra
  • Iniciar actividad
  • En actividad obtener extra

Para almacenar la lista de productos que puede utilizar aquí HashMap (por ejemplo como objeto STATIC)

Clase de ejemplo que describe el producto:

 public class Product { private String _name; private String _description; private int _id public Product(String name, String description,int id) { _name = name; _desctription = description; _id = id; } public String getName() { return _name; } public String getDescription() { return _description; } } Product dell = new Product("dell","this is dell",1); HashMap<String,Product> _hashMap = new HashMap<>(); _hashMap.put(dell.getName(),dell); 

Entonces u pasar a conjunto de adaptador de teclas como:

 String[] productNames = _hashMap.keySet().toArray(new String[_hashMap.size()]); 

Cuando en el adaptador u retorno ver u set oyente como este, por ejemplo:

  @Override public View getView(int position, View convertView, ViewGroup parent) { Context context = parent.getContext(); String itemName = getItem(position) someView.setOnClikListener(new MyOnClickListener(context, itemName)); } private class MyOnClickListener implements View.OnClickListener { private String _itemName; private Context _context public MyOnClickListener(Context context, String itemName) { _context = context; _itemName = itemName; } @Override public void onClick(View view) { //------listener onClick example method body ------ Intent intent = new Intent(_context, SomeClassToHandleData.class); intent.putExtra(key_to_product_name,_itemName); _context.startActivity(intent); } } 

Entonces en otra actividad:

 @Override public void onCreate(Bundle) { String productName = getIntent().getExtra(key_to_product_name); Product product = _hashMap.get(productName); } 

* Key_to_product_name es una String pública static para servir como clave para extra

PD. Lo siento por typo estaba en prisa 🙂 ps2. Esto te daría una idea de cómo hacerlo ps3. Cuando voy a tener más tiempo voy a añadir una descripción detallada

MI COMENTARIO:

  • NO UTILICE NINGUNA DECLARACIÓN DEL INTERRUPTOR
  • NO CREAR ACTIVIDADES SEPARADAS PARA CADA PRODUCTO (U SOLO UNO)

Pude ir alrededor de la cosa entera substituyendo la referencia del contexto de this o Context.this a getapplicationcontext .

 listview.setOnItemClickListener(new OnItemClickListener(){ //setting onclick to items in the listview. @Override public void onItemClick(AdapterView<?>adapter,View v, int position){ Intent intent; switch(position){ // case 0 is the first item in the listView. case 0: intent = new Intent(Activity.this,firstActivity.class); break; //case 1 is the second item in the listView. case 1: intent = new Intent(Activity.this,secondActivity.class); break; case 2: intent = new Intent(Activity.this,thirdActivity.class); break; //add more if you have more items in listView startActivity(intent); } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.