android ListView 滚动加载item
悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容。通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。比如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个“加载更多”按钮,用户点击后,加载下一页数据。
我们今天就结合实例来演示一下使用ListView获取数据的过程。
新建一个loadmore项目,我们来看一下结构图和最终效果图:
相关布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listview_roll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- 相关自定义控件 -->
<TextView
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TextView>
</LinearLayout>
相关源代码:
package com.activity.gdbk;
import java.util.ArrayList;
import java.util.List;
import com.activity.gdbk.PageActivity.PageAdapter;
import com.activity.gdbk.PageActivity.ViewHolder;
import com.gdbk.dao.Bank;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
//滚动ListView 加载相关数据信息
public class RollActivity extends Activity implements Runnable {
// 界面相关组件
private ListView listView_roll;
// 进度对话框
private ProgressDialog progressDialog;
// 自定义相关适配器
private MyAdapter adapter;
// ListView 数据常量定义
private int LastItem = 0; // ListView 加载的最后item位置
//MyAdapter 数据源
List<Bank> banks = new ArrayList<Bank>();
//创建RollActivity 界面的主线程
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
//进行相关数据加载.....
case 1:
progressDialog.dismiss();
for (int i = listView_roll.getCount(); i < listView_roll.getCount() + 10; ++i) {
Bank item=new Bank();
item.setBank_name("湖南省光大银行**支行"+i);
banks.add(item);
}
adapter.notifyDataSetChanged();
//设置LastView 加载最后一项item的位置。
listView_roll.setSelection(LastItem - 1);
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 全屏显示
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_roll);
// 相关组件的初始化方法
listView_roll = (ListView) findViewById(R.id.listview_roll);
initializeAdapter();
listView_roll.setAdapter(adapter);
// ListView 实现OnScrollListener接口
listView_roll.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
LastItem = firstVisibleItem + visibleItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (LastItem == adapter.getCount()
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
// 执行数据异步加载的相关方法。
LoadItems();
}
}
});
}
// 自定义相关方法
// adapter初始化方法----initializeAdapter()
public void initializeAdapter() {
for (int i = 1; i <= 10; i++) {
Bank items = new Bank();
items.setBank_name("湖南省光大银行**支行");
banks.add(items);
}
adapter = new MyAdapter(banks);
}
// 自定义适配器----myAdapter
public class MyAdapter extends BaseAdapter {
// myAdapter 相关参数
private List<Bank> data;
// MyAdapter 构造函数
public MyAdapter(List<Bank> data) {
this.data = data;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// 加载相关布局文件
ViewHolder holder = null;
if (convertView == null) {
convertView = getLayoutInflater().inflate(
R.layout.listview_page_item, parent, false);
holder = new ViewHolder();
// 初始化相关控件
holder.content = (TextView) convertView
.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 设置数据源信息
holder.content.setText(data.get(position).getBank_name());
return convertView;
}
}
// 自定义 布局文件类----ViewHolder
public class ViewHolder {
private TextView content;
}
// 实现继承Runnable 接口覆写相关方法
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(3000);
handler.sendEmptyMessage(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 自定义相关方法-----异步加载相关数据信息方法
public void LoadItems() {
progressDialog = ProgressDialog.show(RollActivity.this, "温馨提示",
"正在加载相关数据信息...", true);
Thread t = new Thread(RollActivity.this);
t.start();
}
}
还没有评论,来说两句吧...