最近幾天研究ListView實現分頁載入和滾動式載入,發現可以用listView的OnScroll方法來實現,直接上代碼
ListViewScroll.java
package zy.lucifer.ListViewScroll;<br />import android.app.Activity;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.view.Gravity;<br />import android.view.View;<br />import android.view.ViewGroup;<br />import android.widget.AbsListView;<br />import android.widget.BaseAdapter;<br />import android.widget.LinearLayout;<br />import android.widget.ListView;<br />import android.widget.ProgressBar;<br />import android.widget.TextView;<br />import android.widget.Toast;<br />import android.widget.AbsListView.OnScrollListener;<br />import android.widget.LinearLayout.LayoutParams;<br />public class ListViewScroll extends Activity {<br />/** Called when the activity is first created. */<br />private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(<br />LinearLayout.LayoutParams.WRAP_CONTENT,<br />LinearLayout.LayoutParams.WRAP_CONTENT);<br />/**<br /> * 設定布局顯示目標最大化屬性<br /> */<br />private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(<br />LinearLayout.LayoutParams.FILL_PARENT,<br />LinearLayout.LayoutParams.FILL_PARENT);<br />ListView listView ;<br />private int lastItem = 0;<br />LinearLayout loadingLayout;<br />private listViewAdapter adapter;<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />listView = (ListView) findViewById(R.id.myList);</p><p>Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>");<br />// 線性布局<br />LinearLayout layout = new LinearLayout(this);<br />// 設定布局 水平方向<br />layout.setOrientation(LinearLayout.HORIZONTAL);<br />// 進度條<br />ProgressBar progressBar = new ProgressBar(this);<br />// 進度條顯示位置<br />progressBar.setPadding(0, 0, 15, 0);<br />// 把進度條加入到layout中<br />layout.addView(progressBar, mLayoutParams);<br />// 常值內容<br />TextView textView = new TextView(this);<br />textView.setText("載入中...");<br />textView.setGravity(Gravity.CENTER_VERTICAL);<br />// 把文本加入到layout中<br />layout.addView(textView, FFlayoutParams);<br />// 設定layout的重力方向,即對齊是<br />layout.setGravity(Gravity.CENTER);<br />// 設定ListView的頁尾layout<br />loadingLayout = new LinearLayout(this);<br />loadingLayout.addView(layout, mLayoutParams);<br />loadingLayout.setGravity(Gravity.CENTER);<br />listView.addFooterView(loadingLayout);<br />adapter = new listViewAdapter();<br />listView.setAdapter(adapter);<br />listView.setOnScrollListener(new OnScrollListener() {</p><p>@Override<br />public void onScroll(AbsListView view, int firstVisibleItem,<br />int visibleItemCount, int totalItemCount) {<br />// TODO Auto-generated method stub<br />Log.i("test" , "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount);<br />lastItem = firstVisibleItem + visibleItemCount - 1;<br />Log.i("test" , "Scroll>>>lastItem:" + lastItem);<br />//顯示50條ListItem,即0-49,因為onScroll是在“滑動”執行過之後才觸發,所以用adapter.count<=41作條件<br />int scrolllength=101;<br />if (adapter.count<=scrolllength) {<br />if (firstVisibleItem+visibleItemCount==totalItemCount) {<br />adapter.count += 10;<br />adapter.notifyDataSetChanged();<br />listView.setSelection(lastItem);<br />int currentPage=adapter.count/10;<br />Toast.makeText(getApplicationContext(), "第"+currentPage+"頁", Toast.LENGTH_LONG).show();<br />}<br />}<br />else {<br /> listView.removeFooterView(loadingLayout);<br />}<br />}<br />@Override<br />public void onScrollStateChanged(AbsListView view, int scrollState) {<br />// TODO Auto-generated method stub<br />}<br />});<br />}<br />class listViewAdapter extends BaseAdapter {<br />int count = 10; /* starting amount */<br />public int getCount() {<br />return count;<br />}<br />public Object getItem(int pos) {<br />return pos;<br />}<br />public long getItemId(int pos) {<br />return pos;<br />}<br />public View getView(int pos, View v, ViewGroup p) {<br />Log.i("test", "getView>>>pos:" + pos);<br />TextView view;<br />if (v == null) {<br />view = new TextView(ListViewScroll.this);<br />} else {<br />view = (TextView) v;<br />}<br />view.setText("ListItem " + pos);<br />view.setTextSize(20f);<br />view.setGravity(Gravity.CENTER);<br />view.setHeight(60);<br />return view;</p><p>}<br />}<br />}
main.xml
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><ListView android:cacheColorHint="#00000000" android:id="@+id/myList"<br />android:layout_width="fill_parent" android:layout_height="fill_parent"<br />><br /></ListView><br /></LinearLayout><br />
如下
由於是本地的內容,所以看不到下面的轉圈圈的等待,如果做耗時操作,例如下載圖片什麼的,則可以實現
enjoy~!
本文由csdn博主曾陽出品 地址http://blog.csdn.net/Zengyangtech/archive/2011/03/17/6255554.aspx
轉載請註明