android 更新baseAdapter方法

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大会写法

  1. View v;  
  2.         ViewHolder vh;  
  3.         if (convertView==null) {  
  4.             v = mat.getLayoutInflater().inflate(R.layout.gview_main, null);  
  5.             vh = new ViewHolder();  
  6.             vh.iv = (ImageView) v.findViewById(R.id.gview_iv);  
  7.             v.setTag(vh);  
  8.         }else{  
  9.             v = convertView;  
  10.             vh = (ViewHolder) v.getTag();  
  11.         }  
  12. //      这里显示的是Bitmap  
  13.         vh.iv.setImageBitmap(datas.get(position));  
  14.         return v;  
  15.     }  
  16.     static class ViewHolder{  
  17.         ImageView iv;  
  18.     }  

//快速开发写法

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(); //必须在这里直接更新,否则不可以
                        }
                    }

        
















你可能感兴趣的:(android 更新baseAdapter方法)