ListView 分页效果

来源:互联网 发布:铁翼雄风 知乎 编辑:程序博客网 时间:2024/06/03 19:16

效果图

第一个图
第二个图

代码


XML代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ListView        android:id="@+id/lv_show"        android:layout_width="match_parent"        android:layout_height="match_parent"         /></RelativeLayout>

Java代码

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.Adapter;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {private ListView lv_show = null;private List<String> list = null;private boolean isBottom=false;ArrayAdapter<String> adapter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setdata();Listener();}private void Listener() {// TODO Auto-generated method stublv_show.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stubif(isBottom){new LoadDataTask().execute();isBottom=false;}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {if(firstVisibleItem+visibleItemCount==totalItemCount){isBottom=true;}}});}class LoadDataTask extends AsyncTask<Void,Void, List<String>>{private ProgressDialog pd=null;@Overrideprotected void onPreExecute() {pd=new ProgressDialog(MainActivity.this);pd.setTitle("正在加载...");pd.setMessage("请稍候...");pd.show();}protected List<String> doInBackground(Void... params) {// TODO Auto-generated method stubList<String>list2=new ArrayList<String>();try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}for(int i=0;i<20;i++){list2.add("动态添加"+i);}return list2;}protected void onPostExecute(List<String> result) {MainActivity.this.list.addAll(list.size(),result);adapter.notifyDataSetChanged();lv_show.setSelection(MainActivity.this.list.size());pd.dismiss();super.onPostExecute(result);}}private void setdata() {// TODO Auto-generated method stublist = new ArrayList<String>();for (int i = 0; i < 50; i++) {list.add("我要高薪就业" + i);}adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_dropdown_item_1line,list);lv_show.setAdapter(adapter);}private void initView() {// TODO Auto-generated method stublv_show = (ListView) findViewById(R.id.lv_show);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

下拉刷新后,有一个bug,不管你向上还是向下都不行。
解决办法是把监听事件改一下

lv_show.setOnScrollListener(new OnScrollListener() {            @Override            public void onScrollStateChanged(AbsListView view, int scrollState) {                // TODO Auto-generated method stub                if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){                    ListView lv=(ListView) view;                    int lastVisiblePosition = lv.getLastVisiblePosition();                    if(lastVisiblePosition==list.size()-1){                        new LoadDataTask().execute();                    }                }            }            @Override            public void onScroll(AbsListView view, int firstVisibleItem,                    int visibleItemCount, int totalItemCount) {            }        });

这样就ok了。

0 0
原创粉丝点击