您的位置:首页 > 其它

简单搞定listview下拉加载更多

2015-10-09 17:20 344 查看
哎,项目需要listview下拉加载更多写个博客就当总结!

            思路:在listview底部加一个布局,加载数据的时候有这个布局,当数据加载完成就没有了。

1、addFooterView()方法可以加一个布局。

2、setVisibility()这个方法控制布局是出现啊,还是消失(隐藏)。

 

不多说上代码:首先一个显示一个listvie这个各位先准备我就不写了

 

底部的一布局代码:

    

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >

<LinearLayout
android:id="@+id/loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >

<ProgressBar
android:id="@+id/footprogress"
style="?android:progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:indeterminateBehavior="repeat" />

<!-- 数据 -->

<TextView
android:id="@+id/tv_scro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center"
android:padding="3.0px"
android:text="读取中..."
android:textColor="#ff000000"
android:textSize="20sp" />
</LinearLayout>

</LinearLayout>


先定义几个全局变量:(在项目就不慢慢弄了)

private View loging;
private int addlist = 0;
private int iii = 1;

/**
* 分页加载
*/

loging = LayoutInflater.from(getActivity())
.inflate(R.layout.scro, null);
loging.findViewById(R.id.loading).setVisibility(View.GONE);
listView.addFooterView(loging);
listView.setOnScrollListener(new OnScrollListener() {
private int totalItemCounts;// 总数量;
private int lastVisibleItem;// 最后一个可见的item;

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.totalItemCounts = totalItemCount;
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
is_divPage = true;
if (is_divPage = true && totalItemCounts == lastVisibleItem
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
loging.findViewById(R.id.loading).setVisibility(
View.VISIBLE);
addlistview();
}
}

});
开启一个线程获得数据 * 获取下拉的数据
*/
private void addlistview() {

new Thread() {
public void run() {
try {
iii++;
companiesLists = GetWebData
.getCompany("http://jy.hsei.org:8086/UnitBaseInfo/GetAllUnit/"
+ iii + "/10");
if (companiesLists != null) {
addlist = addlist + companiesLists.size();
}
companiesList.addAll(companiesLists);
Message msg = Message.obtain();
msg.obj = companiesList;
msg.what = 1;
handler.sendMessage(msg);

} catch (Exception e) {
e.printStackTrace();
}
};
}.start();


说一下上面分页的代码:把一个布局加到listview底部,但是给隐藏掉,如果listview 的setOnScrollListener事件里面触发了的话,那么显示这个(加载)布局同时访问网络获得数据。

有了数据还要把获得的数据放到最开始的数据集合(addAll())里面然后让listview一起显示出来

 

listview里面显示出来:

 

/*
* 网络访问
*/
handler = new Handler() {
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
companiesList = (ArrayList<Company>) msg.obj;

if (companiesList != null) {
datas = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < companiesList.size(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("UnitTypeID", companiesList.get(i).UnitTypeID);
map.put("UnitCode", companiesList.get(i).UnitCode);
map.put("UnitName", companiesList.get(i).UnitName);
map.put("Address", companiesList.get(i).Address);
map.put("UnitID", companiesList.get(i).UnitID);

datas.add(map);
}
// System.out.println("获取的1单位数据:" + data.toString());
if (datas != null) {
progressDialog.dismiss();
}

simpleAdapter = new SimpleAdapter(getActivity(), datas,
R.layout.item_units, new String[] { "UnitTypeID",
"UnitCode", "UnitName", "Address" },
new int[] { R.id.tv_item_UnitType,
R.id.tv_item_UnitCode,
R.id.tv_item_UnitName,
R.id.tv_item_UnitAddress });

listView.setAdapter(simpleAdapter);

loging.findViewById(R.id.loading).setVisibility(View.GONE);

if (addlist > 0) {
listView.setSelection(addlist - 1);
simpleAdapter.notifyDataSetChanged();//
// 通知adapter数据有变化
}

} else {
datas.clear();
simpleAdapter.notifyDataSetChanged();
Toast.makeText(getActivity(), "没有找到您要的数据",
Toast.LENGTH_SHORT).show();
}

}
};


 

 上面的代码就是把从网络上获取到的数据先放在listview里面了,然后在把(加载)布局给隐藏掉就这样完成了下拉加载更多的效果。

 这个是listview加载更多源码

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: