android Listview分页
1.ListView的footer 布局 item_demo6_list_head.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="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/footer_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:orientation="horizontal" > <ProgressBar style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载,请稍等。。。" /> </LinearLayout> </LinearLayout>
2.activity_demo布局(主布局)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:context=".Activity.Demo6Activity"> <include layout="@layout/default_nav_head"/> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/demo6_lv_id"></ListView> </LinearLayout>
Demo6Activity(主界面代码)
public class Demo6Activity extends AppCompatActivity { private ListView listView; private List<String> data; private ArrayAdapter<String> adapter; //分页加载的数据的数量 private int pageSize=10; private int currentPage = 0; private final int pageType=1; //查看更多 private TextView moreTextView; //正在加载进度条 private LinearLayout loadProgressBar; private ListView listview ; // //用来判断是否加载完成 private boolean loadfinish=true; private View footerView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo6); footerView =LayoutInflater.from(this).inflate(R.layout.item_demo6_list_head, null); footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE); data = new ArrayList<String>(); addMore(); listView=(ListView) findViewById(R.id.demo6_lv_id); //添加"加载更多"一定要在设置Adapter之前 adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); listView.addFooterView(footerView); listView.setAdapter(adapter); //当用户滑动listview到最后一项是,动态的加载第二页的数据 listView.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } @Override public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) { //得到listview最后一项的id int lastItemId=listView.getLastVisiblePosition(); //判断用户是否滑动到最后一项,因为索引值从零开始所以要加上1 if((lastItemId+1)==totalItemCount) { footerView.findViewById(R.id.footer_layout).setVisibility(View.VISIBLE); if(totalItemCount>0) { //判断当前页是否超过最大页,以及上一页的数据是否加载完成 if( loadfinish ) { loadfinish=false; new Thread(new Runnable() { public void run() { try { Thread.sleep(4000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } addMore(); //通知listview改变UI中的数据 handler.sendEmptyMessage(0); } }).start(); } } } } }); } private void addMore(){ for (int i=0;i<pageSize;i++) { int position = currentPage*pageSize+i; data.add(position+""); } currentPage ++; } private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: //改变适配器的数目 // adapter.count += pageSize; //通知适配器,发现改变操作 adapter.notifyDataSetChanged(); loadfinish=true; footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE); break; default: break; } super.handleMessage(msg); } }; }