android listView 分批加载
当我们浏览空间到末尾时,数据它会自己加载或者需要我们点击按钮之类的继续加载新的数据。下面我们就介绍如何在ListView中实现数据的分批次加载。
首先创建一个布局文件foot.xml:
<?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="40dp"android:orientation="horizontal" ><Buttonandroid:id="@+id/bt_load"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center_vertical"android:text="加载更多数据" /><ProgressBarandroid:id="@+id/pg"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"/></LinearLayout>xml文件创建成功后我们来看下代码public class MainActivity extends Activity {public static ListView listView;AdapterTest adapterTest;public static View foot;private Boolean isBoolean = false;private Button Btn;private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);foot = getLayoutInflater().inflate(R.layout.list_foot, null);progressBar = (ProgressBar) foot.findViewById(R.id.pg);Btn = (Button) foot.findViewById(R.id.bt_load);//手动加载时需要设置progressBar.setVisibility(View.GONE);listView = (ListView) findViewById(R.id.android_listTest);adapterTest = new AdapterTest(this);listView.addFooterView(foot);listView.setAdapter(adapterTest);//手动加载时设置的监听Btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {progressBar.setVisibility(View.VISIBLE);adapterTest.handler.postDelayed(new Runnable() {@Overridepublic void run() {adapterTest.handler.sendEmptyMessage(0);progressBar.setVisibility(View.GONE);}}, 2000);}});listView.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {Log.d("onScroll", (listView.getCount() - 1)+ "firstVisibleItem="+ (firstVisibleItem + visibleItemCount - 1));//实现自动加载/* if (listView.getCount() - 1 == (firstVisibleItem+ visibleItemCount - 1)) {if (isBoolean) {adapterTest.handler.postDelayed(new Runnable() {@Overridepublic void run() {adapterTest.handler.sendEmptyMessage(0);}}, 2000);isBoolean = false;return;}} else {isBoolean = true;}*/}});}}
适配器AdapterTest.java文件:
public class AdapterTest extends BaseAdapter {private ArrayList<String> strings;private Context mContext;//设置ListView加载最大条目private int max = 55;public AdapterTest(Context context) {strings = new ArrayList<String>();this.mContext = context;setStrigs(0, 20);}private void setStrigs(int start, int length) {if (start < max - 1) {if (start + length <= max) {for (int i = start; i < start + length; i++) {strings.add("项目" + (i + 1));}this.notifyDataSetChanged();} else if (start + length > max) {for (int i = start; i <max; i++) {strings.add("项目" + (i + 1));}this.notifyDataSetChanged();MainActivity.listView.removeFooterView(MainActivity.foot);}}else if (start == max ) {Toast.makeText(mContext, "无数据啦", 1).show();}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn strings.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView view = new TextView(mContext);view.setTextSize(20);view.setText(strings.get(position));return view;}public Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {setStrigs(strings.size(), 10);};};
}

浙公网安备 33010602011771号