当前位置: 代码迷 >> Android >> ListView 复用有关问题
  详细解决方案

ListView 复用有关问题

热度:51   发布时间:2016-04-27 22:42:41.0
ListView 复用问题
package com.linen.medical.adapter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.linen.medical.R;
import com.linen.medical.utils.T;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

public class QueueTitle01Adapter extends BaseAdapter {
private List<Map<String, Object>> list;
private LayoutInflater mInflater;
private Context mcontext;

private List<TextView> tv_list = new ArrayList<TextView>();
private TextView tv_btn;

public QueueTitle01Adapter(Context context, List<Map<String, Object>> list) {
mInflater = LayoutInflater.from(context);
this.list = list;
this.mcontext = context;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
 ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.queue_up_title01_item,
null);
holder.kebie = (TextView) convertView
.findViewById(R.id.tv_queue01_kebie);
holder.bingrenxingming = (TextView) convertView
.findViewById(R.id.tv_queue01_bingrenxingming);
holder.doctor = (TextView) convertView
.findViewById(R.id.tv_queue01_doctor);
holder.time = (TextView) convertView
.findViewById(R.id.tv_queue01_jiuzhenshijian);
holder.address = (TextView) convertView
.findViewById(R.id.tv_queue01_jiuzhendidian);



holder.btnqueue01 = (TextView) convertView
.findViewById(R.id.btn_queue_shenqingpaidui);
holder.btnqueue01  = tv_btn;
convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
}
holder.kebie.setText(list.get(position).get("kebie").toString());
holder.bingrenxingming.setText(list.get(position)
.get("bingrenxingming").toString());
holder.doctor.setText(list.get(position).get("doctor").toString());
holder.time.setText(list.get(position).get("jiuzhentime").toString());
holder.address.setText(list.get(position).get("jiuzhendidian")
.toString());
tv_list.add(holder.btnqueue01);
holder.btnqueue01.setOnClickListener(new queueBtnLestener(position));

// holder.btnqueue01.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
//
// switch (v.getId()) {
// case R.id.btn_queue_shenqingpaidui:
// tv_btn.setBackgroundColor(Color.parseColor("#808080"));
// tv_btn.setTextColor(Color.parseColor("#ffffff"));
// T.show(mcontext, "申请排队btn"+position, 0);
// break;
//
// }
//
// }
// });
return convertView;
}

class queueBtnLestener implements OnClickListener {
int position;

public  queueBtnLestener(int pos) {
this.position = pos;
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_queue_shenqingpaidui:

// tv_list.get(position).setBackgroundColor(Color.parseColor("#808080"));
// tv_list.get(position).setTextColor(Color.parseColor("#ffffff"));
//
// tv_btn.setBackgroundColor(Color.parseColor("#808080"));
// tv_btn.setTextColor(Color.parseColor("#ffffff"));
T.show(mcontext, "申请排队btn"+position, 0);
break;

}
}
}

public class ViewHolder {
TextView kebie;
TextView bingrenxingming;
TextView doctor;
TextView time;
TextView address;
TextView btnqueue01;
}
}
点击btnqueue01 ,改变其背景为灰色,点击一个会出现多个变灰色!!据说是listview的复用问题,,  大神们帮解决下,最好给代码!!!!
------解决思路----------------------
在adpter的getview里面加上判断语句。
例如:if(selectedPosition==position){
holder.textview.setTextColor(Color.parseColor("#ff6501"));
holder.textview.setBackgroundResource(R.drawable.icon_goods_categoryselect);
}else{
holder.textview.setTextColor(Color.parseColor("#404040"));
holder.textview.setBackgroundResource(R.drawable.icon_goods_categorynomal);
}
在activity中根据点击的位置设置selectedpostition的值,之后刷下adpter
  相关解决方案