0

我已经为自己构建了一个包含列表的应用程序。到目前为止,我一直使用 aSimpleAdapter来填充列表,但我决定移至ArrayAdapter. 问题是,我不知道如何以ArrayAdapter同样的方式填充!这是我使用我的方式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 构造函数时,它给了我一个错误。

这是因为 anArrayAdapter是为非常简单的场景设计的,其中数据采用列表/数组的形式,只有一个小部件(通常是 a TextView)要绑定到。由于您的布局中有三个小部件,因此您需要扩展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 回答