Contamos con el resultado a este asunto, o por lo menos eso deseamos. Si continuas con alguna pregunta puedes escribirlo en el apartado de preguntas, para nosotros será un gusto ayudarte
Solución:
Mi consejo para ti sería crear una clase separada que extienda el Adaptador (o alguna subclase del mismo)
Aquí hay un ejemplo simple de una cadena array adaptador.
package ro.gebs.captoom.adapters;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import antistatic.spinnerwheel.adapters.AbstractWheelTextAdapter;
import com.example.captoom.R;
public class LanguagesAdapter extends AbstractWheelTextAdapter
// Countries names
private String languages[];
public LanguagesAdapter(Context context)
super(context, R.layout.lang_item, NO_RESOURCE);
languages = context.getResources().getStringArray(R.array.lang_array);
setItemTextResource(R.id.language_txt);
@Override
public View getItem(int index, View cachedView, ViewGroup parent)
View view = super.getItem(index, cachedView, parent);
return view;
@Override
public int getItemsCount()
return languages.length;
@Override
protected CharSequence getItemText(int index)
return languages[index];
y el uso es simple, solo usa el método .setAdapter();
U otro ejemplo que usa un arrayAdapter:
package apc.example;
import java.util.ArrayList;
import utils.BitmapManager;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class PersonAdapter extends ArrayAdapter
Context context;
int layoutResourceId;
ArrayList data = null;
public PersonAdapter(Context context, int layoutResourceId,
ArrayList data)
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
@Override
public View getView(int position, View convertView, ViewGroup parent)
View row = convertView;
ItemHolder holder = null;
if (row == null)
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ItemHolder();
holder.imgIcon = (ImageView) row.findViewById(R.id.icon);
holder.txtName = (TextView) row.findViewById(R.id.title);
holder.txtDescription = (TextView) row.findViewById(R.id.desc);
row.setTag(holder);
else
holder = (ItemHolder) row.getTag();
Person bean = data.get(position);
holder.txtName.setText(bean.getName());
holder.txtDescription.setText(bean.getDescription());
Bitmap b = BitmapFactory.decodeResource(context.getResources(), R.drawable.user);
BitmapManager.INSTANCE.setPlaceholder(b);
BitmapManager.INSTANCE.loadBitmap(bean.getUrl(), holder.imgIcon, 80, 80);
return row;
public static class ItemHolder
public ImageView imgIcon;
TextView txtName;
TextView txtDescription;
public void updateAdapter(ArrayList pers)
this.data = pers;
Este es un ejemplo de un adaptador para una clase más compleja que tiene más campos en lugar de un simple string. Pero eso se puede modificar fácilmente para ArrayAdapter
y luego ir desde allí.
De todos modos, creo que siempre es una buena práctica escribir sus adaptadores personalizados para las vistas de lista.
¡Espero que esto ayude!
Main.xml
setlanguage.xml
añadir onCreate () de su archivo de actividad
ListView listView;
String[] from = "php_key","c_key","android_key","hacking_key" ;
ArrayAdapter arrayAdapter;
listView = (ListView) findViewById(R.id.zone_list);
arrayAdapter = new ArrayAdapter<>(this,R.layout.setlanguage, R.id.tvName, from);
listView.setAdapter(arrayAdapter);
Estás reutilizando la misma vista en tu int.[] objeto.
int[] to = R.id.txt1,R.id.txt1,R.id.txt1,R.id.txt1;
Parece que los trata a todos como el mismo objeto, por lo que cada vez que agrega un elemento nuevo, cambia los anteriores.
Para utilizar el SimpleAdapter
deberá definir cada vista en el XML con diferentes ID.
int[] to = R.id.txt1,R.id.txt2,R.id.txt3,R.id.txt4;
los SimpleAdapter
puede ser más simple con respecto a su complejidad interna, pero definitivamente no es más simple de usar. Con un ArrayAdapter
simplemente puede pasarle la lista de elementos y dejar que genere vistas automáticamente. Puede ser del tamaño que necesite, siempre que no se quede sin memoria. (Ver más abajo por ejemplo)
Una vez que comience a trabajar con adaptadores personalizados, le recomiendo que vea la charla de E / S de Romain Guy y Adam Powell. Es mucho para asimilar al aprender, pero hacen un gran trabajo al explicar cómo ListViews
trabaja.
//List of Items
String[] name_of_bookmarks = "php","c","android","hacking" ;
//Create your List object for the ArrayAdapter
//and make it the same size as name_of_books
List listBookmarks = new ArrayList(Array.getLength(name_of_bookmarks));
//Add name_of_bookmarks contents to listBookmarks
Collections.addAll(listBookmarks, name_of_books);
//Create an ArrayAdapter passing it the Context, a generic list item and your list
//An alternative to "this" would be "getApplicationContext()" from your main activity
//or "getActivity()" from a fragment. "getBaseContext()" is not recommended.
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.list_item_text, listBookmarks);
//Set the adapter to your ListView
final ListView listView = (ListView) findViewById(R.id.mylist);
listView.setAdapter(arrayAdapter);