• Android简易实战教程--第四十三话《上拉加载与下拉刷新》


    ListView的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现。本篇案例是基于xlistview的。

    布局:

    <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" >  
      
        <me.maxwin.view.XListView  
            android:id="@+id/xlv"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent" />  
      
    </RelativeLayout> 

    主活动的代码:

        package com.itydl.xlistviewdemo;  
          
        import java.text.SimpleDateFormat;  
        import java.util.ArrayList;  
        import java.util.Date;  
        import java.util.List;  
          
        import me.maxwin.view.XListView;  
        import me.maxwin.view.XListView.IXListViewListener;  
        import android.app.Activity;  
        import android.graphics.Color;  
        import android.os.Bundle;  
        import android.os.Handler;  
        import android.os.Message;  
        import android.os.SystemClock;  
        import android.view.View;  
        import android.view.ViewGroup;  
        import android.widget.BaseAdapter;  
        import android.widget.TextView;  
          
        public class MainActivity extends Activity {  
          
            private XListView mXListView;  
            List<String> datas = new ArrayList<String>();  
            private MyAdapter adapter;  
            private boolean isLoadMore;//是否正在加载更多数据的标记  
              
            private long preTime;//上一次刷新的当前系统时间毫秒值  
            private Handler handler = new Handler(){  
                public void handleMessage(android.os.Message msg) {  
                    if(isLoadMore){  
                        //消息是上拉加载更多  
                        initDatas();  
                        isLoadMore = false;  
                        //刷新完毕,关闭上拉加载效果  
                        mXListView.stopLoadMore();  
                    }else{  
                        //消息是下拉刷新  
                        datas.clear();  
                        initDatas();  
                        //刷新完毕,关闭下拉刷新效果  
                        mXListView.stopRefresh();  
                    }  
                    // 刷新listview  
                    adapter.notifyDataSetChanged();  
                };  
            };  
          
            @Override  
            protected void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                setContentView(R.layout.activity_main);  
                initDatas();  
                mXListView = (XListView) findViewById(R.id.xlv);  
                //设置适配器到ListView  
                adapter = new MyAdapter();  
                mXListView.setAdapter(adapter);  
                initListener();  
            }  
              
            private void initListener() {  
                //设置可以下拉刷新,默认就是true  
                mXListView.setPullRefreshEnable(true);  
                  
                //设置可以上拉加载,默认是false  
                mXListView.setPullLoadEnable(true);  
                  
                mXListView.setXListViewListener(new IXListViewListener() {  
                      
                    @Override  
                    public void onRefresh() {  
                        // 下拉刷新,实际发送Handler  
                        //发送一个空消息,延迟两秒后告知刷新数据  
                        handler.sendMessageDelayed(Message.obtain(), 2000);  
                        //添加上一次刷新的时间:  
                        if(preTime != 0){  
                            mXListView.setRefreshTime(refreshData(preTime));  
                        }  
                        preTime = System.currentTimeMillis();  
                    }  
          
                    private String refreshData(long preTime) {  
                        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(preTime));  
                    }  
          
                    @Override  
                    public void onLoadMore() {  
                        //标记正在加载更多,发送Handler  
                        isLoadMore = true;  
                        handler.sendMessageDelayed(Message.obtain(), 2000);  
                    }  
                });  
            }  
          
            /**模拟网络数据*/  
            private void initDatas() {  
                //实际开发应该子线程执行  
                for (int i = 0; i < 50; i++) {  
                    datas.add("我是第" + i + "条数据");  
                }  
            }  
          
            private class MyAdapter extends BaseAdapter{  
          
                @Override  
                public int getCount() {  
                    if(datas != null){  
                        return datas.size();  
                    }  
                    return 0;  
                }  
          
                @Override  
                public Object getItem(int position) {  
                    if(datas != null){  
                        return datas.get(position);  
                    }  
                    return null;  
                }  
          
                @Override  
                public long getItemId(int position) {  
                    return position;  
                }  
          
                @Override  
                public View getView(int position, View convertView, ViewGroup parent) {  
                    //模拟item为TextView  
                    TextView textView = new TextView(MainActivity.this);  
                    textView.setText(getItem(position)+"");  
                    textView.setTextColor(Color.GREEN);  
                    return textView;  
                }  
            }  
        }  

    短短几行代码已经完成了主要功能,运行如下:

    喜欢的朋友可以关注我哦,本专栏会不定期更新简单有趣的Android小文~


  • 相关阅读:
    应用 memcached 提升站点性能
    Servlet 工作原理解析
    AJAX的一些基础和AJAX的状态
    回调地狱以及用promise怎么解决回调地狱
    Ajax的封装
    promise的理解和应用
    jsonp跨域
    浅谈事件冒泡和事件捕获
    JS中的兼容问题总结
    JS写的二级导航栏(利用冒泡原理)
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299506.html
Copyright © 2020-2023  润新知