0

リストを含むアプリを自分で作成しました。これまで、を使用しSimpleAdapterてリストにデータを入力していましたが、に移動することにしましたArrayAdapterArrayAdapter問題は、同じ方法でデータを入力する方法がわからないことです。これが私の使用方法SimpleAdapterです:

adapter=new SimpleAdapter(this, listItems, R.layout.custom_row_view, new String[]{"name", "current", "reset"},  new int[] {R.id.text1, R.id.text2, R.id.text3});

私のlistItems変数は、実際には次のように設定されています。

static final ArrayList<HashMap<String,String>> listItems = new ArrayList<HashMap<String,String>>();

さて、同じ引数でコンストラクターを使おうとするとArrayAdapter、エラーが発生します。これはどのように行うことができますか?

4

2 に答える 2

1

今、同じ引数で ArrayAdapter コンストラクターを使用しようとすると、エラーが発生します。

これはArrayAdapter、データが単一のウィジェット (通常はTextView) のみをバインドするリスト/配列の形式である、非常に単純なシナリオ向けに設計されているためです。レイアウトに 3 つのウィジェットがあるため、ArrayAdapterクラスを拡張してデータをバインドする必要があります。これは、デフォルトの実装では独自に行うことができないためです。次のようになります。

listView.setAdapter(
            new ArrayAdapter<HashMap<String, String>>(this, R.layout.custom_row_view,
                    R.id.text1, listItems) {

                        @Override
                        public View getView(int position, View convertView,
                                ViewGroup parent) {
                            View rowView = super.getView(position, convertView, parent);
                            final HashMap<String, String> item = getItem(position);
                            TextView firstText = (TextView) rowView.findViewById(R.id.text1);
                            firstText.setText(item.get("corresponding_key"));
                            TextView secondText = (TextView) rowView.findViewById(R.id.text2);
                            secondText.setText(item.get("corresponding_key"));
                            TextView thirdText = (TextView) rowView.findViewById(R.id.text3);
                            thirdText.setText(item.get("corresponding_key"));
                            return rowView;
                        }

            });

しかし、最終的には、 の方がシナリオにより適しているのにArrayAdapter、なぜ を使用するのかという疑問があります。SimpleAdapter

于 2013-03-09T10:35:41.143 に答える
0

次のように ArrayAdapter を定義する必要があります。

ListView listView = (ListView) findViewById(R.id.mylist);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
  "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
  "Linux", "OS/2" };

// Define a new Adapter
// First parameter - Context
// Second parameter - Layout for the row
// Third parameter - ID of the TextView to which the data is written
// Fourth - the Array of data

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
  android.R.layout.simple_list_item_1, android.R.id.text1, values);


// Assign adapter to ListView
listView.setAdapter(adapter); 
于 2013-03-09T10:13:29.800 に答える