Android Listview制定属于自己的适配器,完美解决数据刷新等问题!

废话不说,先粘贴出我写的基类

/**
 * Adapter基类
 *
 * @author 智江鹏
 * @version 1.0
 */
public abstract class Base_Z_Adapter extends android.widget.BaseAdapter {

    /**
     * 数据存储集合
     **/
    public List<Object> mDataList = new ArrayList<Object>();
    /**
     * Context上下文
     **/


    /**
     * 日志输出标志
     **/
    protected final String TAG = this.getClass().getSimpleName();

    public Base_Z_Adapter() {

    }


    @Override
    public int getCount() {
        Log.e("777","77"+ mDataList.size());
        return mDataList.size();
    }

    @Override
    public Object getItem(int position) {
        if (position < mDataList.size())
            return mDataList.get(position);
        else
            return null;
    }

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


    /**
     * 添加数据
     */
    public boolean addItem(Object object) {
        return mDataList.add(object);
    }

    /**
     * 在指定索引位置添加数据
     *
     * @param location 索引
     * @param object   数据
     */
    public void addItem(int location, Object object) {
        mDataList.add(location, object);
    }

    /**
     * 集合方式添加数据
     *
     * @param collection 集合
     */
    public boolean addItem(Collection<? extends Object> collection) {
        boolean b = mDataList.addAll(collection);
        notifyDataSetChanged();
        return b;

    }

    public List<Object> getdate() {

        return mDataList;

    }

    /**
     * 在指定索引位置添加数据集合
     *
     * @param location   索引
     * @param collection 数据集合
     */
    public boolean addItem(int location, Collection<? extends Object> collection) {
        return mDataList.addAll(location, collection);
    }

    /**
     * 移除指定对象数据
     *
     * @param object 移除对象
     * @return 是否移除成功
     */
    public boolean removeItem(Object object) {
        return mDataList.remove(object);
    }

    /**
     * 移除指定索引位置对象
     *
     * @param location 删除对象索引位置
     * @return 被删除的对象
     */
    public Object removeItem(int location) {
        return mDataList.remove(location);
    }

    /**
     * 移除指定集合对象
     *
     * @param collection 待移除的集合
     * @return 是否移除成功
     */
    public boolean removeAll(Collection<? extends Object> collection) {
        return mDataList.removeAll(collection);
    }

    /**
     * 清空数据
     */
    public void clear() {
        mDataList.clear();
    }

//接下来关键来了
如何写自己的Adapter呢,很简单,继承下就好了,然后贴出我需要用到的Adapter

/**
 * Created by 他的猫 on 2017/8/21.
 * 消息中心适配器
 */

public class Type_Adapter extends Base_Z_Adapter {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Type_Adapter.Holder holder = null;
        // 查找控件
        if (null == convertView) {
            convertView = LayoutInflater.from(BaseApplication.getInstance())
                    .inflate(R.layout.tab_item_type, null);
            holder = new Type_Adapter.Holder();


            holder.dh = (TextView) convertView
                    .findViewById(R.id.dh);
            holder.pjwd = (TextView) convertView
                    .findViewById(R.id.pjwd);
            holder.smsj = (TextView) convertView
                    .findViewById(R.id.smsj);


            // 缓存Holder
            convertView.setTag(holder);
        } else {
            holder = (Type_Adapter.Holder) convertView.getTag();
        }
        //这儿就需要注意了,这儿强转化的类名是需要我接下来要传的哦!
        signType_Bean.SucessBean nrowDataeme = (signType_Bean.SucessBean) getItem(position);
        //拿到这个bean,就可以往适配器上设置数据了
         holder.pjwd.setText(nrowDataeme.getSignName());



        return convertView;
    }


    public class Holder {


        TextView dh;
        TextView pjwd;
        TextView smsj;

    }

写好自己的适配器就要初始化适配器和为适配器设置数据了

    Type_Adapter type_adapter;
    List<signType_Bean.SucessBean> sucess;


        //新建一个适配器对象
          type_adapter = new Type_Adapter();
        //设置给listview
        spinner.setAdapter(type_adapter);
        initview();
        //用我自己封装的Okhttp去请求数据,博客中有介绍
        API.signType(new Okhttp.Objectcallback() {
            @Override
            public void onsuccess(String st) {
                Log.e("8888", st);
                //拿到数据后用我封装的JSONUtils解析一下,博客中有介绍

                signType_Bean signType_bean = JSONUtils.parseJSON(st, signType_Bean.class);
                sucess = signType_bean.getSucess();
                if (sucess.size() > 0) {
                    TYpe = sucess.get(0).getSignName();
                    //关键来了,往adapter中加入数据,只需要addItem
                    type_adapter.addItem(sucess);
                }


            }

            @Override
            public void onFalia(int code, String errst) {
                Log.e("8888", "网络错误");
            }
        });

至此,你自己的adapter就可以加载出数据了

但是,假如你想把adapter的数据都清除掉怎么办?
type_adapter.clear();

假设,你想刷新下数据该怎么写?
type_adapter.clear();
type_adapter.addItem(sucess);
对,就这么写,先把adapter的旧数据删掉,再加载新数据!

如果还有新需求,请自行参考我自己写的父类,活学活用,至此完美解决数据刷新结束 !

我的QQ:2973901695,欢迎互相交流!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值