1,当数据已经被setAdapter显示后。需要重新更新。但是不能让信息从第一条开始显示。比如:我们在做一个查询页面显示,每次用户下拉刷新时,必须保证信息不能从第一条信息看吧。再比如:两个用户聊天时,必须保证信息每次发送都在用户视线内吧。不能聊着聊着,信息又跑到第一条了。这个时候我们就需要更新适配器。
方法就是在适配器中定义一个方法,传入参数等于适配器的参数
adapter.TransferParameters(chatDatas);//在Activity中将聊天的数据传入
public void TransferParameters(List<Chat> data){//BaseAdapter中传参的方法 datas = data;//等于适配器中的数据 }
2,当ListView列表视图如果是多个时,比如聊天的时候,左边是一个人,右边是一个人。再比如,新闻页面有的有图片,有的没有图片。这是多态性的item布局方式。如果是这种情况需要在适配器中多实现两个方法。
// 返回某一个样式的item子布局 @Override public int getItemViewType(int position) { if (position==0) { return 0; }else { return 1; } }
// 返回的是item子布局的个数,跟数组下标一个道理 @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; }
3,getView是优化性的。推荐两种方法。一种是谷歌IO大会时提倡的复写convertView方法。一种是导入一个快速开发包。直接用。
//谷歌IO大会写法
//快速开发写法
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = act.getLayoutInflater().inflate( R.layout.item_xlistview, null); } TextView text = ViewHolder.get(convertView, R.id.item_xlistview_text); text.setText(datas.get(position).getText()); text.setTextColor(datas.get(position).getTcolor());// 注意这里是int的值 return convertView; }
4,xlistview在BaseAdapter中删除操作。
首先在getView方法中绑定position
<span style="white-space:pre"> </span>// 为删除绑定position delete.setTag(position);在需要的地方解绑,获取到对象
<span style="white-space:pre"> </span>// 解帮获取 deletepos = (Integer) v.getTag(); Driay d = datas.get(deletepos);
进行删除操作
<span style="white-space:pre"> </span>try {// 删除条件 dbutils.delete(Driay.class, WhereBuilder.b("id", "=", d.getId())); datas.remove(deletepos);// 删除xlistview列表上数据 this.notifyDataSetChanged();// 更新 Toast.makeText(act, "删除成功", 0).show(); } catch (DbException e) { e.printStackTrace(); }
在xlistview中计算。
public void onLoadMore() { count++;//这个为全局int类型变量 try { findAll = dbutils.findAll(Selector.from(Driay.class).limit(5+5*count)); adapter.butoomUdapter(findAll);//记录查询所保存的位置 adapter.notifyDataSetChanged();//更新适配器长度 if (findAll==null) { toast(act, "已到最后一页"); } xlv.stopLoadMore();//关闭加载更多
侧滑删除更新:
deleteLocation(deleteList.get(position).getAddressid());//在侧滑时,传所点击的id
public void deleteLocation(final String id) { HttpUtils http = new HttpUtils(); http.configCurrentHttpCacheExpiry(1000 * 10); RequestParams params = new RequestParams(); params.addBodyParameter("uid", PrefsConfig.u_id); params.addBodyParameter("address_id", id); http.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { String result = responseInfo.result; try { org.json.JSONObject jsonObject = new org.json.JSONObject(result); if(jsonObject.getInt("code") == 1){ for (int i = 0; i < deleteList.size() ; i++) { if (deleteList.get(i).getAddressid().equals(id)){ deleteList.remove(deleteList.get(i));//删除 mAddressAdapter.notifyDataSetChanged(); //必须在这里直接更新,否则不可以 } }