ListView的自动加载

已经学android已经有好几个月了,当我添加列表时,我会想到用listview 来装载,方便也可以实现多样性。但是之前只是实现的是一定数量的加载,要是数据多了怎么管理数据,就没去考虑,最近要做一个新闻显示的列表,这个就要实现一定数量的内容显示,所以借鉴了网上了一些做法,特此积累下来。

好吧,先让大家看看效果图吧:

(网速不给力,暂没能上传)

        布局文件有三个:

           main.xml

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
   <ListView 
       android:id="@+id/lv"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       ></ListView>

</LinearLayout>

item.xml

 

<?xml version="1.0" encoding="utf-8"?>
<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:text="henhao"
android:id
="@+id/tvs"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:textSize
="18dip"
/>

</LinearLayout>

loading.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id
="@+id/loading_layout"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
android:orientation
="vertical"
android:gravity
="center_horizontal"
>
<RelativeLayout
android:id="@+id/load_id"
android:orientation
="horizontal"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:gravity
="center"
>

<TextView
android:layout_width="wrap_content"
android:layout_height
="wrap_content"
android:layout_alignParentLeft
="true"
android:gravity
="center_vertical"
android:text
="Loading..."
android:textSize
="12pt" />

<ProgressBar android:layout_width="wrap_content"
android:layout_height
="wrap_content"
android:gravity
="center_vertical"
android:layout_alignParentRight
="true"/>
</RelativeLayout>
</LinearLayout>


java源文件就有两个:

 ListviewLoadActivity.java

View Code
package net.load.cn;

import java.util.ArrayList;
import java.util.List;

import android.R.array;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;

public class ListviewLoadActivity extends Activity implements OnScrollListener{
ListView list;
ArrayList<String> data;
private int currentpage=1;
private int pagesize=20;
boolean isloading=false;
private View loadingView;
int last_item_position;
CustomAdpter custAdpter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

list=(ListView)findViewById(R.id.lv);
data=UpdateData.getMyData(currentpage,pagesize);
loadingView=LayoutInflater.from(this).inflate(R.layout.loading, null);
list.addFooterView(loadingView);
custAdpter=new CustomAdpter();
list.setAdapter(custAdpter);
list.setOnScrollListener(this);


}
Handler hand=new Handler(){
public void handleMessage(android.os.Message msg){
custAdpter.count=currentpage*pagesize;
custAdpter.notifyDataSetChanged();
hand.removeMessages(0);
list.removeFooterView(loadingView);
isloading=false;
}

};



private void updateData()
{
try{
Thread.sleep(3000);
}catch (Exception e) {
// TODO: handle exception
}
currentpage++;

ArrayList<String> mydata=new ArrayList<String>();

mydata=UpdateData.getMyData(currentpage, pagesize);
for(String item:mydata){
data.add(item);
}

}




class CustomAdpter extends BaseAdapter{

public int count=data.size();
@Override
public int getCount() {
return count;
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v=LayoutInflater.from(ListviewLoadActivity.this).inflate(R.layout.item, null);
TextView tv=(TextView)v.findViewById(R.id.tvs);
tv.setText(data.get(position));
return v;
}

}
    @Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
last_item_position=firstVisibleItem+visibleItemCount-1;
if(last_item_position==totalItemCount-2){
Toast.makeText(ListviewLoadActivity.this, "加载中...", 1).show();
if(!isloading){
new Thread(){
public void run(){
isloading=true;
updateData();
hand.sendEmptyMessage(0);
}
}.start();
}
}
if(list.getFooterViewsCount()==0){
list.addFooterView(loadingView);
}

}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
//Toast.makeText(ListviewLoadActivity.this, "已经更新", 1).show();
}


}


UpdateData.java

View Code
 1 /**
2 * filename : UpdateData.java
3 * company : **** Limited (android) 2012-2015
4 * compiler : eclipse 3.7.1
5 * remark : TODO
6 * created : 2012-3-14 weeds
7 * changed : 后来者居下
8 */
9
10 package net.load.cn;
11
12 import java.util.ArrayList;
13
14 /**
15 * filename : TODO
16 */
17 public class UpdateData {
18
19 public static ArrayList<String> getMyData(int curr,int pagesize){
20 ArrayList<String> listed=new ArrayList<String>();
21 for(int i=(curr-1)*pagesize;i<curr*pagesize;i++)
22 {
23 listed.add("这是第"+i+"个列表");
24 }
25 return listed;
26 }
27 }



 

posted @ 2012-03-14 16:08  狼迹天涯  阅读(182)  评论(0)    收藏  举报