XListView实现下拉刷新上拉加载+分页加载+适配器展示

 

Xlistview项目主要是三部分:

  • XlistView                XListView主体
  • XListViewHeader   header
  • XListViewFooter     footer

控件调用:

<com.bwie.xlistview.XlistView
        android:id="@+id/xlistView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

 下面就是如何使用XListView,注释全面

public class HomeFragment extends Fragment {

    private int page = 1;
    private XlistView xlistView;
    private Handler handler = new Handler();
    private String path = "http://www.xieast.com/api/news/news.php?page=";
    private ArrayList<Data> list;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_01, null, false);
        //控件
        xlistView = view.findViewById(R.id.xlistview);
        //设置可上拉加载下拉刷新
        xlistView.setPullLoadEnable(true);
        xlistView.setPullRefreshEnable(true);
        //设置XListView监听
        xlistView.setXListViewListener(new XlistView.IXListViewListener() {
            @Override
            public void onRefresh() {
                //刷新数据
                page = 1;
                getJsonData(path + page);
                //刷新时间
                getRefreshDate();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        xlistView.stopRefresh();
                    }
                }, 2000);
            }

            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        xlistView.stopLoadMore();
                    }
                }, 2000);
                //加载更多
                page++;
                getJsonData(path + page);
            }

        });
        getRefreshDate();
        getJsonData(path + page);//传进一个参数做好拼接
        return view;
    }

    //获取当前系统时间
    private void getRefreshDate() {
        //时间显示格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //获取系统时间
        Date date = new Date(System.currentTimeMillis());
        String currentDate = simpleDateFormat.format(date);
        //修改刷新时间
        xlistView.setRefreshTime(currentDate);
    }

    //请求网络解析json方法
    private void getJsonData(String path) {
        MyAsyncTask myAsyncTask = new MyAsyncTask();
        myAsyncTask.execute(path);
    }


    //自定义AsyncTask类,实现异步加载
    private class MyAsyncTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... strings) {
            //获取参数
            String path = strings[0];
            try {
                //创建url
                URL url = new URL(path);
                //打开该链接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                //设置请求方式
                conn.setRequestMethod("GET");
                //设置网络加载、读取延时
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                //获取状态码 作比较
                int code = conn.getResponseCode();
                if (code == HttpURLConnection.HTTP_OK) {
                    //网络资源
                    InputStream inputStream = conn.getInputStream();
                    //字节数组输出流
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    //向bos写入数据
                    while ((len = inputStream.read(buffer)) != -1) {
                        bos.write(buffer, 0, len);
                    }
                    //关流
                    inputStream.close();
                    bos.close();
                    //将获取到的数据返给onPostExecute方法
                    String json = bos.toString();
                    return json;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String json) {
            super.onPostExecute(json);
            Log.i("xxx", "onPostExecute: " + json);
            //解析展示
            Gson gson = new Gson();
            JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
            //获取到json内的集合
            ArrayList<Data> data = jsonBean.getData();
            //参数==1的时候创建一个新的容器集合
            if (page == 1) {
                list = new ArrayList<>();
            }
            //把json的数据添加到新的容器
            list.addAll(data);
            //适配器
            MyAdapter myAdapter = new MyAdapter(getActivity(), list);
            xlistView.setAdapter(myAdapter);
            //30 60 90  加载新的数据之后显示最新一页
            xlistView.setSelection(myAdapter.getCount() - 29);
        }
    }

}

Adapter适配器也是继承BaseAdapter!!!

效果图:  

这里有适配器里面的写法:https://blog.csdn.net/weixin_43917449/article/details/85798278

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值