您的位置:首页 > 移动开发 > Android开发

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

2017-09-20 00:03 633 查看
废话不说,先粘贴出我写的基类

/**
* 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,欢迎互相交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐