studio recyclerview llenar example como agregar activity android listview methods android-activity elements

recyclerview - listview android studio



Android ListView con elementos onClick (9)

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.) llamen a una función para abrir una nueva actividad con información diferente cada uno.

Por ejemplo:

Si toco a Dell, debe aparecer una nueva actividad que me muestre información sobre Dell. Si toco Samsung, lo mismo.

Busqué en Google pero no pude encontrar nada útil, ¿alguna pista? Creo que esto es básico, pero soy nuevo, así que no sé por dónde empezar


Comienzas nuevas actividades con intenciones. Un método para enviar datos a un intento es pasar una clase que implemente parcelable en la intención. Toma nota de que estás pasando una copia de la clase.

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

Aquí tengo un onItemClick. Creo intención y pongo una clase entera en el intento. La clase que envío ha implementado parcelable. Consejo: solo necesita implementar el parseable sobre lo que es mínimamente necesario para volver a crear la clase. Es decir, un nombre de archivo o algo simple como una cadena, algo que un constructor puede usar para crear la clase. La nueva actividad puede obtener getExtras más tarde y básicamente está creando una copia de la clase con su método constructor.

Aquí lanzo la clase kmlreader de mi aplicación cuando recibo un clic en la vista de lista.

Nota: a continuación el resumen es una lista de la clase que estoy aprobando para que get (position) devuelva la clase de hecho es la misma lista que puebla la lista

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 adelante en la nueva actividad saco la clase analizable 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 debería extender ArrayListAdapter e implementar esto en su método getView() . El segundo parámetro (una View ) debe inflarse si su valor es null , aprovecharlo y configurarlo onClickListener() justo después de inflar.

La elección de 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 desea información sobre cómo extender ArrayListAdapter , recomiendo este link .


En tu actividad, donde definiste tu 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 getItem de su adaptador, escribe

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


Pude Context.this todo el problema reemplazando la referencia de contexto de this o Context.this a getapplicationcontext .


bien en su onitemClick enviará el valor seleccionado como deal , y lo enviará en su intento al abrir nueva actividad y en su nueva actividad obtendrá 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();

para establecer los datos en la intención

intent.putExtra("Key", item);

para obtener los datos en la segunda actividad

getIntent().getExtras().getString("Key")


para qué tipo de Infierno implementar Parcelable?

él está pasando al adaptador String [] por lo

  • obtener el elemento (Cadena) en la posición
  • crear intento
  • ponerlo como extra
  • iniciar actividad
  • en la actividad obtener extra

para almacenar la lista de productos que puede usar 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);

luego pasas al juego de llaves del adaptador como:

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

cuando esté en el adaptador u return view u set listener 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); } }

luego 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 cadena pública estática para servir como clave para extra

PD. perdón por el error de escritura que tenía prisa :) ps2. esto debería darte una idea de cómo hacerlo ps3. cuando tenga más tiempo, agregaré una descripción detallada

MI COMENTARIO:

  • NO USE NINGUNA DECLARACIÓN DE INTERRUPTOR
  • NO CREAR ACTIVIDADES SEPARADAS PARA CADA PRODUCTO (NECESITA SOLO UNO)

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); } });


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); } });


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); } });