zoukankan      html  css  js  c++  java
  • ListView 实现像Android Market那样 分页加载


     最近几天研究ListView实现分页加载和滚动加载,发现可以用listView的OnScroll方法来实现,直接上代码
    ListViewScroll.java
    view plaincopy to clipboardprint?
    package zy.lucifer.ListViewScroll; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.Gravity; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AbsListView; 
    import android.widget.BaseAdapter; 
    import android.widget.LinearLayout; 
    import android.widget.ListView; 
    import android.widget.ProgressBar; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import android.widget.AbsListView.OnScrollListener; 
    import android.widget.LinearLayout.LayoutParams; 
    public class ListViewScroll extends Activity { 
        /** Called when the activity is first created. */ 
        private LayoutParams mLayoutParams = new LinearLayout.LayoutParams( 
                LinearLayout.LayoutParams.WRAP_CONTENT, 
                LinearLayout.LayoutParams.WRAP_CONTENT); 
        /**
         * 设置布局显示目标最大化属性
         */ 
        private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams( 
                LinearLayout.LayoutParams.FILL_PARENT, 
                LinearLayout.LayoutParams.FILL_PARENT); 
        ListView listView ; 
        private int lastItem = 0; 
        LinearLayout loadingLayout; 
        private listViewAdapter adapter; 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main); 
            listView = (ListView) findViewById(R.id.myList); 
             
            Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>"); 
            // 线性布局 
            LinearLayout layout = new LinearLayout(this); 
            // 设置布局 水平方向 
            layout.setOrientation(LinearLayout.HORIZONTAL); 
            // 进度条 
            ProgressBar progressBar = new ProgressBar(this); 
            // 进度条显示位置 
            progressBar.setPadding(0, 0, 15, 0); 
            // 把进度条加入到layout中 
            layout.addView(progressBar, mLayoutParams); 
            // 文本内容 
            TextView textView = new TextView(this); 
            textView.setText("加载中..."); 
            textView.setGravity(Gravity.CENTER_VERTICAL); 
            // 把文本加入到layout中 
            layout.addView(textView, FFlayoutParams); 
            // 设置layout的重力方向,即对齐方式是 
            layout.setGravity(Gravity.CENTER); 
            // 设置ListView的页脚layout 
            loadingLayout = new LinearLayout(this); 
            loadingLayout.addView(layout, mLayoutParams); 
            loadingLayout.setGravity(Gravity.CENTER); 
            listView.addFooterView(loadingLayout); 
            adapter = new listViewAdapter(); 
            listView.setAdapter(adapter); 
            listView.setOnScrollListener(new OnScrollListener() { 
      
                @Override 
                public void onScroll(AbsListView view, int firstVisibleItem, 
                        int visibleItemCount, int totalItemCount) { 
                    // TODO Auto-generated method stub 
                    Log.i("test" , "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount); 
                    lastItem = firstVisibleItem + visibleItemCount - 1; 
                    Log.i("test" , "Scroll>>>lastItem:" + lastItem); 
                    //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件 
                    int scrolllength=101; 
                    if (adapter.count<=scrolllength) { 
                        if (firstVisibleItem+visibleItemCount==totalItemCount) { 
                            adapter.count += 10; 
                            adapter.notifyDataSetChanged(); 
                            listView.setSelection(lastItem); 
                            int currentPage=adapter.count/10; 
                            Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show(); 
                        } 
                    } 
                    else { 
                         listView.removeFooterView(loadingLayout);  
                    } 
                } 
                @Override 
                public void onScrollStateChanged(AbsListView view, int scrollState) { 
                    // TODO Auto-generated method stub 
                } 
            }); 
        } 
        class listViewAdapter extends BaseAdapter { 
            int count = 10; /* starting amount */ 
            public int getCount() { 
                return count; 
            } 
            public Object getItem(int pos) { 
                return pos; 
            } 
            public long getItemId(int pos) { 
                return pos; 
            } 
            public View getView(int pos, View v, ViewGroup p) { 
                Log.i("test", "getView>>>pos:" + pos); 
                TextView view; 
                if (v == null) { 
                    view = new TextView(ListViewScroll.this); 
                } else { 
                    view = (TextView) v; 
                } 
                view.setText("ListItem " + pos); 
                view.setTextSize(20f); 
                view.setGravity(Gravity.CENTER); 
                view.setHeight(60); 
                return view; 
                 
            } 
        } 

    main.xml
    view plaincopy to clipboardprint?
    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        > 
    <ListView android:cacheColorHint="#00000000" android:id="@+id/myList" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
            > 
        </ListView> 
    </LinearLayout> 

  • 相关阅读:
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行 已解决!
    iis 无法在Web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行
    aspx页面,Page_Load 无人进入,解决
    Ajax后台传数组参数,接收不到报错!
    FusionCharts和highcharts 饼图区别!
    redis
    Hibernate不同数据库的连接及SQL方言
    Kafka
    Zookeeper
    BaseDao+万能方法 , HibernateDaoSupport
  • 原文地址:https://www.cnblogs.com/fly_binbin/p/2286091.html
Copyright © 2011-2022 走看看