ArrayList<MyClass> myList = new ArrayList<MyClass>();
ListView listView = (ListView) findViewById(R.id.list);
ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(this, R.layout.row,
to, myList.);
listView.setAdapter(adapter);
class MyClass {
public String reason;
public long long_val;
}
J'ai créé row.xml dans des mises en page, mais je ne sais pas comment afficher à la fois raison et long_val dans ListView à l'aide de ArrayAdapter.
Implémentez un adaptateur personnalisé pour votre classe:
public class MyClassAdapter extends ArrayAdapter<MyClass> {
private static class ViewHolder {
private TextView itemView;
}
public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.listview_association, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
MyClass item = getItem(position);
if (item!= null) {
// My layout has only one TextView
// do whatever you want with your string and long
viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
}
return convertView;
}
}
Pour ceux qui ne connaissent pas très bien le framework Android, ceci est expliqué plus en détail ici: https://github.com/codepath/Android_guides/wiki/Using-an-ArrayAdapter -with-ListView .
Vous pouvez simplement ajouter une méthode toString()
à MyClass, par http://developer.Android.com/reference/Android/widget/ArrayAdapter.html :
Cependant, le TextView est référencé, il sera rempli avec le toString () de chaque objet du tableau. Vous pouvez ajouter des listes ou des tableaux d'objets personnalisés. Redéfinissez la méthode toString () de vos objets pour déterminer le texte à afficher pour l'élément de la liste.
class MyClass {
@Override
public String toString() {
return "Hello, world.";
}
}
Je pense que c'est la meilleure approche. L'utilisation de la classe ArrayAdapter générique et l'extension de votre propre adaptateur d'objet est aussi simple que suit:
public abstract class GenericArrayAdapter<T> extends ArrayAdapter<T> {
// Vars
private LayoutInflater mInflater;
public GenericArrayAdapter(Context context, ArrayList<T> objects) {
super(context, 0, objects);
init(context);
}
// Headers
public abstract void drawText(TextView textView, T object);
private void init(Context context) {
this.mInflater = LayoutInflater.from(context);
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder vh;
if (convertView == null) {
convertView = mInflater.inflate(Android.R.layout.simple_list_item_1, parent, false);
vh = new ViewHolder(convertView);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
drawText(vh.textView, getItem(position));
return convertView;
}
static class ViewHolder {
TextView textView;
private ViewHolder(View rootView) {
textView = (TextView) rootView.findViewById(Android.R.id.text1);
}
}
}
et voici votre adaptateur (exemple):
public class SizeArrayAdapter extends GenericArrayAdapter<Size> {
public SizeArrayAdapter(Context context, ArrayList<Size> objects) {
super(context, objects);
}
@Override public void drawText(TextView textView, Size object) {
textView.setText(object.getName());
}
}
et enfin, comment l'initialiser:
ArrayList<Size> sizes = getArguments().getParcelableArrayList(Constants.ARG_PRODUCT_SIZES);
SizeArrayAdapter sizeArrayAdapter = new SizeArrayAdapter(getActivity(), sizes);
listView.setAdapter(sizeArrayAdapter);
J'ai créé un Gray personnalisable ArrayAdapter avec TextView layout:
Sous-classez le ArrayAdapter et substituez la méthode getView () pour renvoyer votre propre vue contenant le contenu que vous souhaitez afficher.
Voici un exemple rapide et compliqué d'utilisation d'un ArrayAdapter si vous ne voulez pas vous embêter avec l'extension de la classe mère:
class MyClass extends Activity {
private ArrayAdapter<String> mAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
mAdapter = new ArrayAdapter<String>(getApplicationContext(),
Android.R.layout.simple_dropdown_item_1line, Android.R.id.text1);
final ListView list = (ListView) findViewById(R.id.list);
list.setAdapter(mAdapter);
//Add Some Items in your list:
for (int i = 1; i <= 10; i++) {
mAdapter.add("Item " + i);
}
// And if you want selection feedback:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Do whatever you want with the selected item
Log.d(TAG, mAdapter.getItem(position) + " has been selected!");
}
});
}
}