欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于异步listview数据加载有关问题

更新时间: 2014-01-05 02:35:52 责任编辑: Author_N1

 

关于异步ListView数据加载问题
楼主写了一个读取机子所有视频的ListView
由于读取需要一定的时间,所以我就用了异步加载的办法
下面是我的代码,并没有达到异步加载的目的,启动后还是要等几秒钟才全部显示出来

我想实现边显示,边加载的效果,应该怎么改?
package com.siyehuazhilian.myvideoviewplayer;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
// 加载数据模式
private static final int UPDATA = 1;
// 声明控件对象
private ListView videoListView = null;
// 数据集合
private ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
// 适配器
private SimpleAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoListView = (ListView) findViewById(R.id.listview_videolist);

adapter = new SimpleAdapter(this, list, R.layout.list_item,
new String[] { "title" }, new int[] { R.id.textview_item });

videoListView.setAdapter(adapter);

videoListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {

}
});

}

@Override
protected void onResume() {
super.onResume();
new Thread() {
public void run() {
loadData();
};
}.start();
}

private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == UPDATA) {
adapter.notifyDataSetChanged();
}
};
};

/**
 * 加载数据
 * 
 */
private void loadData() {
Cursor cursor = getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null,
null);

while (cursor.moveToNext()) {
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("title", cursor.getString(cursor
.getColumnIndex(MediaStore.Video.Media.TITLE)));
hashMap.put("paht", cursor.getString(cursor
.getColumnIndex(MediaStore.Video.Media.DATA)));
list.add(hashMap);
handler.sendEmptyMessage(UPDATA);
}

cursor.close();
}

}

--参考方法--
分页显示 ,一页只显示15条,应该不会延时了。
你一次性从数据库读取 是比较慢的。
你可以先读取前15条,后台偷偷再后台异步读取更多的数据存放到列表里面,然后分页
--参考方法--
我现在也做这块,具体显示几条要开机子了,有的机子性能高,可以显示20,有的低可以显示10条,经过多台机子测试,12条最保险,然后判断用户拉到最上方或者拉到最下方刷新listview的时候再在多显示,如果纯粹异步加载,还是有延迟,机子不能再oncreate的时候加载完成,顺便说下oncreate一般执行为5~7ms,如果数据一多绝对超过加载时间,,,
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:35:52
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/11928/
本文WWW.DOC100.NET DOC100.NET版权所有。