zoukankan      html  css  js  c++  java
  • 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);
            }
        };
    
    }
    
  • 相关阅读:
    LR11
    安装Nginx+uWSGI+Django环境
    MYSQL 安装更新,使用,管理,备份和安全等
    oracle里要查看一条sql的执行情况,有没有走到索引,怎么看?索引不能提高效率?
    大神:python怎么爬取js的页面
    Sublime 编译出来的是 dos格式,不是unix格式
    前天搞了一天?昨天搞了一天?今天搞了半小时
    搞了一宿,弄完了一个POP3协议
    我竟然。。。傻了近一年
    跨进程信息交互真个费事。
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/7060355.html
Copyright © 2011-2022 走看看