0

私は 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[] のみが使用されます

ここに画像の説明を入力

4

2 に答える 2

0

Fragments を使用していないことはほぼ間違いないと思います。そのため、スピナーが画像を変更するためのカスタム アダプターは実際には必要ありません。両方が 1 つのアクティビティ内に存在します。

http://developer.android.com/guide/topics/ui/controls/spinner.htmlごとに、

  • Activity クラスを確認してくださいimplements OnItemSelectedListener
  • 追加onItemSelectedし、必要onNothingSelectedに応じて、
  • 内部の画像セレクター コード ログインonItemSelected(現在の位置を取得するために使用することを忘れないで parent.getItemAtPosition(pos)ください)。
于 2014-08-03T11:40:27.320 に答える