下拉刷新、上拉加载

来源:互联网 发布:数据库原理精品课程 编辑:程序博客网 时间:2024/05/21 22:53
 /**      下拉刷新
 *
 *          1 首先要把org.com.cctest.view包导入到自己的工程下(然后修改包名)
 *          2 其次把 xlistview_footer.xml和   xlistview_header.xml文件导入到自己的工程的res/layout下
 *          3 然后把xlistview_arrow.png 导入到自己工程res/drawable-hdpi下
 *          4 倒包 :gson-2.2.4.jar和xUtils-2.4.4.jar 到res/libs下
 *          5 在xml文件下创建自定义view 全路径(org.com.cctest.view.XListView)
 *          6 在MainActivity(当前所用的活动)中写逻辑代码

 */


--------------------------------------------------------------------------------------------------------------------------------------


public class MainActivity extends Activity {
    // 加载的网址(接口地址)
    private String refresh = "http://ic.snssdk.com/2/article/v25/stream/?category=news_tech&count=20&min_behot_time=1465266200&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1465265107&loc_mode=5&lac=4527&cid=28883&iid=4464422609&device_id=17258390367&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SAMSUNG&os_api=19&os_version=4.4.4&uuid=353040417908000&openudid=84c1c7b192991cc6";
    private String more = "http://ic.snssdk.com/2/article/v25/stream/?category=news_hot&count=20&max_behot_time=1465886546&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1465889498&loc_mode=5&lac=4527&cid=28883&iid=4464422609&device_id=17258390367&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SAMSUNG&os_api=19&os_version=4.4.4&uuid=353040417908000&openudid=84c1c7b192991cc6";
    // 把自定义view提为全局变量
    private XListView xlv;
    // 链表集合(查询方便)
    private LinkedList<DataBean> list;
    // 匿名内部类写handler
    private Handler handler = new Handler() {
        MyAdapter myAdapter;
        @SuppressWarnings("unchecked")
        public void handleMessage(Message msg) {
            // 判断发过来的what值(int型)
            switch (msg.what) {
            // 加载初始化数据
            case 1:
                list = (LinkedList<DataBean>) msg.obj;
                myAdapter = new MyAdapter();
                xlv.setAdapter(myAdapter);
                // 停止加载更多 ,刷新 方法
                loadOver();
                break;
            // 刷新
            case 2:
                //刷新时 先清空
                list.clear();
                //遍历集合
                for (DataBean dataBean : (LinkedList<DataBean>) msg.obj) {
                    // 向开头添加
                    list.addFirst(dataBean);
                }
                // 刷新适配器
                myAdapter.notifyDataSetChanged();
                // 刷新后停止加载
                loadOver();

                break;
            // 加载更多
            case 3:
                for (DataBean dataBean : (LinkedList<DataBean>) msg.obj) {
                    // 向结尾添加
                    list.addLast(dataBean);
                }
                // 刷新适配器
                myAdapter.notifyDataSetChanged();
                loadOver();
                break;
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 寻找自定义view的控件 初始化界面
        xlv = (XListView) findViewById(R.id.view);
        // 给控件设置支持下拉和下滑
        xlv.setPullLoadEnable(true);
        xlv.setPullRefreshEnable(true);
        // 初始化数据 (加载页面时就有数据)
        getData(1, refresh);
        // xlv的监听事件
        xlv.setXListViewListener(new IXListViewListener() {
            @Override
            // 刷新
            public void onRefresh() {
                getData(2, refresh);
            }
            @Override
            // 加载
            public void onLoadMore() {
                getData(3, more);
            }
        });
    }

    // 通过i的值进行判断 是刷新还是加载 path是数据的接口地址
    private void getData(final int i, String path) {
        // 实例化httpUtils
        HttpUtils httpUtils = new HttpUtils();
        // 无论什么时间刷新 都能刷出来
        httpUtils.configCurrentHttpCacheExpiry(0);
        // httpUtils进行请请求 个体方式
        // 1 请求方式 2请求的接口地址 3 请求返回的接口数据
        httpUtils.send(HttpMethod.GET, path, new RequestCallBack<String>() {

            @Override
            // 请求失败
            public void onFailure(HttpException arg0, String arg1) {
            }
            @Override
            // 请求成功
            public void onSuccess(ResponseInfo<String> arg0) {

                // 获得当前返回的json串
                String result = arg0.result;
                // 实例化Gson
                Gson gson = new Gson();
                // 封装
                Data data = gson.fromJson(result, Data.class);
                Message msg = Message.obtain();
                msg.obj = data.getData();
                msg.what = i;
                handler.sendMessage(msg);
            }
        });

    }

    // 停止加载更多/刷新
    public void loadOver() {
        // 停止加载更多
        xlv.stopLoadMore();
        // 停止刷新
        xlv.stopRefresh();
        // 设置刷新时的时间
        xlv.setRefreshTime(getTime());

    }

    // 格式化时间
    @SuppressLint("SimpleDateFormat")
    public String getTime() {
        SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
        Date date = new Date();
        String time = format.format(date);
        return time;

    }
    // 适配器
    private class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }
 
        @Override
        public long getItemId(int position) {
            return 0;
        }  

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View view = View.inflate(MainActivity.this,
                    android.R.layout.simple_list_item_1, null);

            TextView text1 = (TextView) view.findViewById(android.R.id.text1);

            text1.setText(list.get(position).getTitle());

            return view;
        }
    }
}


0 0