关于自定义Adapter中更新界面的问题

来源:互联网 发布:飞叶子在淘宝叫什么 编辑:程序博客网 时间:2024/06/07 05:31

前几天,在做一个adapter里费时操作时遇到了如下问题。如图



点击发送开始上传文件,同时将上传失败改为开始上传,发送各位正在上传,在自定义的adapter中,xml单独的,所以你在Activity中想拿到  发送的监听,不好实现啊。

索性就在Adapter中直接给发送按钮加监听,



public class Adapter extends BaseListAdapter<QueueInfo> {


public Adapter(Context context, List<QueueInfo> values) {
super(context, values);
// TODO Auto-generated constructor stub
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return super.getCount();
}
@Override
public Info getItem(int position) {
// TODO Auto-generated method stub
return super.getItem(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return super.getItemId(position);
}
@Override
protected View getItemView(View convertView, int position) {
// TODO Auto-generated method stub
UtilsLog.e("juhe", "position");
ViewHolder holder = null;
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.queue_list_item, null);
holder = new ViewHolder();
holder.name = (TextView)convertView.findViewById(R.id.name);

holder.sss = (TextView)convertView.findViewById(R.id.sss);
holder.ail = (TextView)convertView.findViewById(R.id.fail);

convertView.setTag(holder);
}else{
holder =(ViewHolder)convertView.getTag(); 
}
holder.send.setText("发送");
holder.tv_upfail.setText("失败");

return convertView;
}
public class ViewHolder {

public TextView name, sss,fail;
public Button send;
}

private void    fangfa(View convertView,  ViewHolder holde,
final Info  info, final int position) {
final ViewHolder hold = holde;
holde.send.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

new   AsyncTask(hold.tv_upfail,hold._send,info).execute(pic);

new  AsyncTask().execute(Object);
}
}
});
}


AsyncTask 内部类省略。。。。。。。。。。。。。。

然后在

@Override
protected void onPostExecute(UploadResult result) {
super.onPostExecute(result);

hfail.setText("上传失败");-
hsend.setText("发送");---

--  -    ----   ------   --  --请注意,上边这两句看是可以,实际上你根本拿不到发送按钮 等组件,因为本就在内部类中,本想弄个全局的ViewHolder不就完了,可以一试又不行,因为每个Item都会被监听,你这一全局,就相当于只拿到了最后一个的发送按钮等组件,其他的不行啊,狂想一阵,还是把对应的Item里的组件直接就带过去吧,于是就在asycTask里通过构造方法传了过去,果然解决了问题,哈哈哈!

}



还有一点要告诉大家的是,如果你adapter里有了数据变动,又必须在AsycTask里操作,之后必须去更新adapter肯定想到notifyDataSetChanged();方法,不好意识,在这里,没用奥。所以想办法重新走一遍Andpter,此时必须记得吧蓝色部分加上,否者

发送按钮  就变不回了会一直是正在上传 ,等到你真正遇到的时候就会明白!


原创粉丝点击