1

Androidスピナーのカスタムスタイルを作成しようとしていますが、いくつかの問題があります。多くの例で、配列をgetCustomViewメソッドに渡すことに気づきました。配列の代わりにリストを渡すことができるかどうか疑問に思っています。

2番目の問題は、なぜ変数を宣言し、クラス変数スコープで初期化したのかということです。彼らはこのような配列を宣言しました。

String []data1={"Brainbitz:java","Brainbitz:Android","Brainbitz:Embedded Systems","Brainbitz:PHP"};

クラス変数スコープ内。しかし、リストに対して実行しようとすると、エラーが発生します。なぜ?

第三に、

リストをgetCustomViewに渡すことができる場合、どうすればよいですか?これがチュートリアルチュートリアルへのリンクです

私はこのソースコードを検討しています。

 public View getCustomView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.spinner, parent, false);
            TextView label=(TextView)row.findViewById(R.id.textView1);
            label.setText(list3.get(position));

//            TextView sub=(TextView)row.findViewById(R.id.textView2);
//            sub.setText(data2[position]);
//
//            ImageView icon=(ImageView)row.findViewById(R.id.imageView1);
//            icon.setImageResource(images[position]);

            return row;
            }

上記のコードでは、list3リストタイプ参照に位置を渡すための構文がわかりません。

これを説明してください。

4

2 に答える 2

2

初めに、

デフォルト ArrayAdapterのクラスを使用しています。

new ArrayAdapter<String>();

Stringデータバインドにクラスを使用します。を使用して作成する場合ArrayAdapterArrayListまたはを拡張してカスタムアダプタListを作成する必要がある場合。ArrayAdapter<Custom_Class>BaseAdapter

このArrayAdapterクラスは、任意のJavaオブジェクトを入力として処理できます。この入力のデータをレイアウトのTextViewにマップします。

ArrayAdapterデータ入力オブジェクトのメソッドを使用して、toString()表示する文字列を決定します。

ArrayAdapter<myClass>の使用方法 とこのチュートリアルをご覧ください

アップデート:

public class MyAdapter extends ArrayAdapter<String>
{
  private List<String> listString = new ArrayList<String>();

  public MyAdapter(Context context, int textViewResourceId,
                        List<String> objects) {
  super(context, textViewResourceId, objects);
  // TODO Auto-generated constructor stub
  listString  = objects;
  }

  public View getCustomView(int position, View convertView, ViewGroup parent) {

   LayoutInflater inflater=getLayoutInflater();
   View row=inflater.inflate(R.layout.spinner, parent, false);
   TextView label=(TextView)row.findViewById(R.id.textView1);
   label.setText(listString.get(position)); // How to use listString
   .
   .
   .
于 2013-01-04T09:42:17.143 に答える
0

これが修正された解決策です、

public class MyAdapter extends ArrayAdapter<String>
    {

        public MyAdapter(Context context, int textViewResourceId,List<String> objects) {
              super(context, textViewResourceId, objects);
              // TODO Auto-generated constructor stub
        }
            @Override
        public View getDropDownView(int position, View convertView,ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.spinner, parent, false);
            TextView label=(TextView)row.findViewById(R.id.textView1);
            label.setText(list3.get(position));

//            TextView sub=(TextView)row.findViewById(R.id.textView2);
//            sub.setText(data2[position]);
//
//            ImageView icon=(ImageView)row.findViewById(R.id.imageView1);
//            icon.setImageResource(images[position]);

            return row;
            }

   }

基本的に、私は1つの間違いを犯しました。1つは、コンストラクターを正しく初期化していないことです。

于 2013-01-04T10:23:40.567 に答える