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