私は Android で ListViews と ExpandableListViews をかなり扱ってきました。そして、1 つの customAdaper と、インスタンス Arrayadapter を拡張するアダプタクラスを作成して、リストビューに画像とテキストを入力する方法を知っています。
私が現在開発しているこのアプリでは、Spinner を ArrayAdapter と一緒に使用しています。ArrayAdapter のサブクラスでは、getView メソッドをオーバーライドして、ビューにテキストと画像を設定しています。
しかし問題は、getView が 1 回だけ呼び出されることです。最初の listitem は、アプリの起動時とリストから項目を選択するときに表示されます。ここではうまくいくようです。しかし、リストを介してリストを展開すると、getView-method は呼び出されません - 文字列からの名前のみがリストに入れられます
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 ですが、選択した listobject のみが対象で、残りは対象外です。ここでは String[] のみが使用されます