Saltar al contenido

listview con arraylist, adaptador simple en android

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

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *