我正在使用许多人写博客的方法创建一个多行ListView - 创建一个ArrayList>并向其中添加项目,创建SimpleAdapter,然后调用setListAdapter。我的(缩写)代码看起来像这样:
final ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>();
HashMap<String,String> temp;
for (ProviderResults pr : providerArrayList){
temp = new HashMap<String,String>();
temp.put("providerName",pr.getProviderName());
temp.put("providerAddress",pr.getAddress());
temp.put("providerCityStateZip",pr.getCityStateZip());
temp.put("providerPhone",pr.getPhone());
myList.add(temp);
}
SimpleAdapter adapter = new SimpleAdapter(this, myList, R.layout.custom_row_view,
new String[] {"providerName","providerAddress","providerCityStateZip","providerPhone"},
new int[] {R.id.providerName,R.id.providerAddress, R.id.providerCityStateZip, R.id.providerPhone}
);
setListAdapter(adapter);
它工作正常,除了我必须添加这样的延迟:
int sum = 0;
for (int i = 0; i < 90000; i++) {
sum += 1;
}
...在创建SimpleAdapter之前,否则我在ListView中没有数据。这几乎就像代码异步运行一样,就像在填充ArrayList之前创建和绑定适配器一样。我在每个HashMap中拥有的行越多,我需要延迟的时间越长。
对我做错了什么的想法?
更新:我知道这不是实现ListView的理想方式,所以我不是在寻找有关如何进行自定义适配器等的信息,我已经这样做了。这只是我正在玩的东西,我正在试图找出为什么这个EXACT代码的行为方式,当没有任何东西可以导致它这样做时...
答案 0 :(得分:0)
您需要使用自定义listView适配器。我已经写了一篇关于如何做到这一点的小教程。您还可以参考一个示例源。
答案 1 :(得分:0)
尝试在使用它们之前创建传递给构造函数的两个数组。可能会修复它,虽然它可能不应该..