关于自定义Adapter中更新界面的问题
2013-09-24 23:10
281 查看
前几天,在做一个adapter里费时操作时遇到了如下问题。如图
![](http://img.blog.csdn.net/20130924223831984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdXNlcnpoYW5naGFvMTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
点击发送开始上传文件,同时将上传失败改为开始上传,发送各位正在上传,在自定义的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,此时必须记得吧蓝色部分加上,否者
发送按钮 就变不回了会一直是正在上传 ,等到你真正遇到的时候就会明白!
点击发送开始上传文件,同时将上传失败改为开始上传,发送各位正在上传,在自定义的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,此时必须记得吧蓝色部分加上,否者
发送按钮 就变不回了会一直是正在上传 ,等到你真正遇到的时候就会明白!
相关文章推荐
- [英国][记录][战争中的世界:二战全史(26集)][BD-MKV/58G][中英双字][经典收藏]
- C# 汉字转换拼音简码和全拼音
- 五大常用算法之分治法
- 【js学习笔记-052】js中的面向对象技术------集合类
- 2013年最新最热播的电影 合集
- 【Android基础入门〖4〗】四大组件之Service
- HTML基础之<head>篇
- 统计排序的代价
- MS SQL 统计信息浅析上篇
- opengl学习笔记2-2-矩形绘制
- Qt学习之路(3):组件布局
- JQuery Div scrollTop ScrollHeight
- android无线adb开发调试
- 无法将Ethernet0 连接到虚拟网络"VMnet8"
- 【ATT】Scramble String
- 音标学习
- 走进C++程序世界------继承和派生
- 未约定经济补偿的竞业禁止条款是否无效
- poj 1966 (最小割点集)
- poj 3308 (最大流)