我一直在使用 android 中的 ListViews 和 ExpandableListViews。而且我知道如何通过制作一个 customAdaper 来使用图像和文本填充列表视图 - 以及扩展例如 Arrayadapter 的适配器类。
在我正在开发的这个应用程序中,我将 Spinner 与 ArrayAdapter 一起使用。在 ArrayAdapter 的子类中,我重写了 getView 方法以使用文本和图像填充视图。
但问题是 getView 只被调用一次 - 当应用程序启动和从列表中选择一个项目时显示的第一个列表项。在这里它似乎工作。但是当我通过列表扩展列表时,不会调用 getView 方法 - 仅将字符串中的名称放入列表中
String[] string = {"ssun", "venus", "earth", "march"};
我想要的是完全控制视图,这样我就可以用我自己的图标、文本等填充整个列表——这正是以前对 ListView 和 Expandable ListView 对象所做的。
我知道我在这里做错了,我可以看到 getView 方法只调用第一个/选定的项目的逻辑。但我希望调用所有视图,因此我有一个包含图像图标和操作文本的漂亮列表。
在扩展 Activity 的类中
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
String[] string = {"sun", "venus", "earth", "march"};
MyArrayAdapter adapter = new MyArrayAdapter(this, string);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
和 CustomAdapter
public class MyArrayAdapter extends ArrayAdapter <String> {
private final String[] values;
private final Context context;
public MyArrayAdapter(Context context, String[] values) {
super (context, R.layout.celestial_list, values);
this.values = values;
this.context = context;
}
private static class ViewHolder {
TextView textView;
ImageView imageView;
ImageView infoView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.celestial_list, parent, false);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.label);
viewHolder.imageView = (ImageView) view.findViewById(R.id.icon);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
System.out.println("view = " + view + " för position " + position);
viewHolder.textView.setText(values[position]);
switch (position) {
case 0:
viewHolder.imageView.setImageResource(R.drawable.sun);
break;
case 1:
viewHolder.imageView.setImageResource(R.drawable.sun);
break;
case 2:
viewHolder.imageView.setImageResource(R.drawable.sun);
break;
case 3:
viewHolder.imageView.setImageResource(R.drawable.sun);
break;
}
return view;
}
}
屏幕截图 1. 似乎没问题 - 调用 getView ...
屏幕截图 2 但仅适用于选定的列表对象 - 不适用于其余部分。此处仅使用 String[]