简单实用XlistView实现下拉刷新,上拉加载网络数据

使用之前先导入XlistView的包:

下载地址:https://github.com/Maxwin-z/XListView-Android

由于XlistView不是最新的技术,在导入之后会报错,我们只需要更改XlistView中的 build.gradle

把里边支持的sdk版本改成我们目前项目所对应的sdk版本

编译之后没有问题就可以愉快的使用啦~~

xml文件

在导入包后,便可以直接在xml文件中使用XlistView了

<?xml version="1.0" encoding="utf-8"?>
<xlistview.bawei.com.xlistviewlibrary.XListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/x_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</xlistview.bawei.com.xlistviewlibrary.XListView>

这里布局就放一个XlistView了

Activity中主要设置适配器,设置刷新

package jiangguxu.example.com.myapplication.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

import jiangguxu.bawei.com.myapplication.R;
import jiangguxu.bawei.com.myapplication.adapter.XlistAdapter;
import jiangguxu.bawei.com.myapplication.bean.XlistBean;
import jiangguxu.bawei.com.myapplication.net.NetUtils;
import xlistview.bawei.com.xlistviewlibrary.XListView;

public class MainActivity extends AppCompatActivity {
    private XListView x_listview;
    private NetUtils netUtils;
    //拼接字符串
    private String api = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=";
    private int type = 5010;
    private List<XlistBean.DataBean> dataBeanList = new ArrayList<>();
    private XlistAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        x_listview = findViewById(R.id.x_listview);
        //开启刷新
        x_listview.setPullLoadEnable(true);
        x_listview.setPullRefreshEnable(true);
        x_listview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            //刷新
            public void onRefresh() {
                type = 5010;
                netUtils.getDataFromService(api + type);
            }

            @Override
            //加载
            public void onLoadMore() {
                type++;
                netUtils.getDataFromService(api + type);
            }
        });
        adapter = new XlistAdapter(dataBeanList,MainActivity.this);
        x_listview.setAdapter(adapter);
        //获取网络请求回来的数据
        //这里的网络解析使用了封装好的网络工具类
        netUtils = NetUtils.getInstance();
        netUtils.setNetCallBack(new NetUtils.NetCallBack() {
            @Override
            public void onSuccess(String result) {
                //Log.i("sssss",result);
                Gson gson = new Gson();
                XlistBean xlistBean = gson.fromJson(result.replace("null(", "").replace(")", ""), XlistBean.class);
                if (type==5010){
                    dataBeanList.clear();
                }
                dataBeanList.addAll(xlistBean.getData());
                adapter.notifyDataSetChanged();
                //停止刷新
                x_listview.stopRefresh();
                x_listview.stopLoadMore();
            }
        });
        netUtils.getDataFromService(api+type);
    }
}

这里的加载数据使用的是封装好的网络工具类,网络接口采用字符串拼接的方式,方便加载新的数据

Adapter适配

和listview一样,XlistView的适配器也是继承BaseAdapter

package jiangguxu.example.com.myapplication.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import jiangguxu.bawei.com.myapplication.R;
import jiangguxu.bawei.com.myapplication.bean.XlistBean;

public class XlistAdapter extends BaseAdapter {
    private List<XlistBean.DataBean> list;
    private Context context;


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

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if (convertView==null){
            holder=new ViewHolder();
            convertView= View.inflate(context,R.layout.item_layout,null);
            holder.text_title = convertView.findViewById(R.id.tv_brief);
            holder.img_icon = convertView.findViewById(R.id.lb_image);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.text_title.setText(list.get(position).getBrief());
        ImageLoader.getInstance().displayImage(list.get(position).getLbimg().get(0).getSrc(),holder.img_icon);
        return convertView;

    }
    class ViewHolder{
        TextView text_title;
        ImageView img_icon;
    }
}

这里和listview一样,不做解释了。

这样就可以简单的实现了,具体的也可以去GitHub上了解。

猜你喜欢

转载自blog.csdn.net/Do_the_best_/article/details/81741359