My advice for you will be to create a separate class that extends the Adapter (or some subclass of it)
Here is a simple example of a String array adapter.
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]; } }
and simple use of the .setAdapter(); method .setAdapter();
Or another example that uses an 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<Person> { Context context; int layoutResourceId; ArrayList<Person> data = null; public PersonAdapter(Context context, int layoutResourceId, ArrayList<Person> 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<Person> pers){ this.data = pers; } }
This is an example adapter for a more complex class with more fields than a simple string. But this can easily be changed to an ArrayAdapter<String> , and then from there.
In any case, I believe that it is always recommended to write your own custom adapters for viewing lists.
Hope this helps!
Adrian olar
source share