XListView(上拉刷新,下拉加载)

本文介绍了一种使用XListView实现Android应用中下拉刷新和上拉加载更多的方法。通过自定义ListView并结合AsyncTask进行网络数据请求,实现了数据的动态更新。文章详细展示了初始化组件、配置监听器以及数据解析的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------------------------------------oncreate及全局变量

  private XListView xListView;
    private int pageIndex=1;
    private int operType=1;//操作类型 1:刷新  2:加载更多操作

  private String myurl="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+pageIndex;

 

 private ListViewAdapter listViewAdapter;

  

private List<ResultData.DataBean> datas;

 

@Override

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

        xListView = findViewById(R.id.xlv);

        datas=new ArrayList<>();

        //初使化
        initXlv();

        //请求网络数据
        requestNetData();

    }


----------------------------------------------------------请求网络加载数据的方法

  private void requestNetData() {
        new MyTask().execute(myurl);

    }

---------------------------------------------------------AsyncTask请求,重写两个方法

class MyTask extends AsyncTask<String,Void,String>{

        @Override
        protected String doInBackground(String... strings) {
            try {
                URL url=new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

                urlConnection.setRequestMethod("GET");
                urlConnection.setReadTimeout(5000);
                urlConnection.setConnectTimeout(5000);

                if(urlConnection.getResponseCode()==200){
                    InputStream inputStream = urlConnection.getInputStream();

                    String s = streamToString(inputStream);
                    return s;



                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            Gson gson=new Gson();
            ResultData resultData = gson.fromJson(s, ResultData.class);

            //选取出来的列表要显示的数据
            List<ResultData.DataBean> data = resultData.getData();

            if(operType==1){//代表刷新操作
                datas.clear();//清空集合
            }

            //添加一个集合数据
            datas.addAll(data);

            setXLvAdapter();

            if(operType==1){
                //关闭头部视图
                xListView.stopRefresh();

                Date date=new Date(System.currentTimeMillis());
                SimpleDateFormat sdf=new SimpleDateFormat("MM-dd HH:mm:ss");
                String time = sdf.format(date);

                //设置刷新时间
                xListView.setRefreshTime(time);

            }else{
                //关闭底部视图
                xListView.stopLoadMore();
            }
        }

    }


-------------------------------------------------------------数据设置适配器

 //设置适配器
    public void setXLvAdapter(){
        if(listViewAdapter==null){
            listViewAdapter = new ListViewAdapter(datas,MainActivity.this);
            xListView.setAdapter(listViewAdapter);
        }else{
            listViewAdapter.notifyDataSetChanged();//刷新
        }

    }


--------------------------------------------------------------Gson转成string的方法

private String streamToString(InputStream stream) {
        StringBuilder sbuilder=new StringBuilder();
        String str;
        BufferedReader reader=new BufferedReader(new InputStreamReader(stream));

        try {
            while ((str=reader.readLine())!=null){
                sbuilder.append(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  sbuilder.toString();

    }



----------------------------------------------------------设置上拉下拉,重写两个方法

 private void initXlv() {
        //1.设置它支持的模式
        xListView.setPullLoadEnable(true);//支持上拉加载
        xListView.setPullRefreshEnable(true);//支持下拉刷新

        //2.设置上下拉刷新回调接口
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {//刷新时回调
                operType=1;
                pageIndex=1;
                myurl="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+pageIndex;
                requestNetData();

            }

            @Override
            public void onLoadMore() {//加载更多时回调
                operType=2;
                pageIndex++;
                myurl="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+pageIndex;
                requestNetData();

            }
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值