创建Android ListView时为什么需要延迟?

时间:2011-01-17 20:55:53

标签: android listview

我正在使用许多人写博客的方法创建一个多行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代码的行为方式,当没有任何东西可以导致它这样做时...

2 个答案:

答案 0 :(得分:0)

您需要使用自定义listView适配器。我已经写了一篇关于如何做到这一点的小教程。您还可以参考一个示例源。

http://asimmittal.net/blog/?p=170

答案 1 :(得分:0)

尝试在使用它们之前创建传递给构造函数的两个数组。可能会修复它,虽然它可能不应该..