哎,項目需要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加載更多源碼