Android初学者入门—————XlistView与下拉刷新,上拉加载

使用前准备工作,需要用到第三方开源文件,可以到github下载MaxWin_Xlistview,需要用到的为view包,头尾XML文件,更改Values中strings.xml(可直接复制),xlistview_arrow.png图片复制过来,然后导入自己的包。完成以上工作,需要在清单文件中给予权限
<uses-permission android:name="android.permission.INTERNET"/>
。如果遇到R文件丢失,需要在build.gradler中将
compileSdkVersion 26
targetSdkVersion 26
compile 'com.android.support:appcompat-v7:26.+'

改为25

一:创建布局

XlistView必须为全类名引用
 二:代码中主要功能为:获取到数据(以请求网络数据为例),设置适配器,设置监听事件

       1,创建一个获取数据的方法(之前有详细讲解异步获取网络数据的步骤,本文直接复制不多做详细注释)

  

private void getDataShuju() {
    AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... voids) {

            String path = "此处为请求数据的接口"+NUM;
            try {
                URL url = new URL(path);

                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //设置
                connection.setRequestMethod("GET");
                connection.setReadTimeout(5000);
                connection.setConnectTimeout(5000);

                //获取结果码
                int responseCode = connection.getResponseCode();
                if (responseCode == 200){
                    InputStream inputStream = connection.getInputStream();

                    String json = streamToString(inputStream,"utf-8");
                              //streamToString方法在下
return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } //此方法需要手动提示添加 @Override protected void onPostExecute(String json) { Gson gson = new Gson(); MyBean mb = gson.fromJson(json, MyBean.class); list = new ArrayList<>(); //添加 list.addAll(mb.getData()); adapter = new MyAdapter(MainActivity.this,list); list_view.setAdapter(adapter); } }; asyncTask .execute();}
 //streamToString方法  将解析获得的字节输入流转换成字符串
private String streamToString(InputStream inputStream, String s) {
    try {
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String string = null;
        StringBuilder builder = new StringBuilder();
        while ((string=bufferedReader.readLine())!=null){
            builder.append(string);

        }
        bufferedReader.close();
        return builder.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
2、创建适配器(跟listview用法差不多,也可以继承自定义的适配器BaseAdapter,以下为自己的适配器,参考)
public class MyAdapter extends BaseAdapter{
    Context context;
    List<MyBean.DataBean> list;

    public MyAdapter(Context context, List<MyBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view==null){
            view = View.inflate(context,R.layout.item_layout,null);
            holder = new ViewHolder();
            holder.item_text = (TextView) view.findViewById(R.id.item_text);
            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }
        holder.item_text.setText(list.get(i).getTitle());
        return view;
    }

    class ViewHolder{
        TextView item_text;
    }
}

3、设置点击监听事件
       setXListViewListener(this);    
       MainActivity实现XListView.IXListViewListener接口
      会重写两个方法,一个
       刷新: onRefresh()   加载:onLoadMore()

      此时需要回到create方法之前
       //自定义从中间显示,方便展示上拉和下拉
       int NUM = 2;
       
@Override
    public void onRefresh() {
        NUM --;
        if (NUM >0){
            //获取数据,自定此方法与上边第一次请求数据方法有小改动小区别,可添加刷新时间
            refreshData();

        }else {

            Toast.makeText(MainActivity.this,"没有最新数据了",Toast.LENGTH_SHORT).show();
            list_view.stopRefresh();//停止刷新
        }

    }


 private void refreshData() {
        //异步获取
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String path = "网络数据接口";
                try {
                    URL url = new URL(path);

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);

                    //获取结果码
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();

                        String json = streamToString(inputStream,"utf-8");

                        return json;
                    }

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

                return "";
            }
           @Override
            protected void onPostExecute(String json) {
                Gson gson = new Gson();
                MyBean mybean = gson.fromJson(json, MyBean.class);

                //数据要添加到集合的最前边

                list.addAll(0,mybean.getNewslist());
                //设置适配器
                 setAdapte();

                //停止刷新
                list_view.stopRefresh();
                //设置本次刷新的时间

                Date date = new Date(System.currentTimeMillis());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
                String time = simpleDateFormat.format(date);


                list_view.setRefreshTime(time);

            }
        };

        asyncTask .execute();


    }



@Override
    public void onLoadMore() {
        NUM ++;
        //请求网络获取数据
        只需再次调用请求数据的方法即可;
    }

注意:使用之前都要试试接口是否能用,符合不符合自己的使用需求












 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值