根据http://blog.csdn.net/boylinux/article/details/8860443 这位大神的帖子,我的代码如下,现在的问题是Listview中的Button和imageview和textview控件点击之后不会响应,而在滑动一下Listview后,之前的点击事件才会响应,导致这个问题的原因不明,但是如果不用HashMap这个MAP的话,就不会有这个问题,请问大神们这是为什么呢?代码如下:
public class MyTwoAdapter extends BaseAdapter {
Context context;
private List data;
FollowInfo followInfo;
Bitmap bitmap;
FinalBitmap finalBitmap;
HashMap lmap = new HashMap();
private LayoutInflater mInflater=null;
public void setData(List<FollowInfo> data) {
this.data = data;
}
public MyTwoAdapter(Context context) {
this.context = context;
mInflater = LayoutInflater.from(context);
finalBitmap = FinalBitmap.create(context);//初始化FinalBitmap模块
finalBitmap.configLoadingImage(R.drawable.ic_launcher);
}
@Override
public int getCount() {
return data.size();
}
@Override
public FollowInfo getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint("NewApi") @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (lmap.get(position)==null) {
// if (convertView == null) {
convertView = mInflater.inflate(R.layout.mytwo_item, null);
viewHolder = new ViewHolder();
viewHolder.user_logo = (ImageView) convertView.findViewById(R.id.user_logo);
viewHolder.user_name = (TextView) convertView.findViewById(R.id.user_name);
viewHolder.add_time = (TextView) convertView.findViewById(R.id.add_time);
viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv);
viewHolder.sign1 = (TextView) convertView.findViewById(R.id.sign1);
viewHolder.sign2 = (TextView) convertView.findViewById(R.id.sign2);
viewHolder.sign3 = (TextView) convertView.findViewById(R.id.sign3);
viewHolder.up = (Button) convertView.findViewById(R.id.yes_up);
viewHolder.no_up = (Button) convertView.findViewById(R.id.no_up);
viewHolder.up_num = (TextView) convertView.findViewById(R.id.up_num);
viewHolder.say_sth = (ImageButton) convertView.findViewById(R.id.say_sth);
viewHolder.share = (ImageButton) convertView.findViewById(R.id.share);
viewHolder.fl = (FrameLayout) convertView.findViewById(R.id.fl);
viewHolder.describe = (TextView) convertView.findViewById(R.id.describe);
viewHolder.iv.setOnClickListener(clickListener);
lmap.put(position, convertView);
convertView.setTag(viewHolder);
followInfo = data.get(position);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewHolder.fl.getLayoutParams();
layoutParams.width = AndroidUtil.SCREEN_WIDTH; //图片宽度填满屏幕
layoutParams.height = (int) (AndroidUtil.SCREEN_WIDTH * 1.5);
viewHolder.fl.setLayoutParams(layoutParams);
viewHolder.user_logo.setImageResource(R.drawable.ic_launcher);
viewHolder.iv.setImageResource(R.drawable.ic_launcher);
viewHolder.user_name.setText(followInfo.getUser_name());
viewHolder.up_num.setText(followInfo.getHot() + "");
viewHolder.add_time.setText(UpdateTime.getUpdateDate(new Date().getTime(), followInfo.getUpload_date(), context));
if (!followInfo.getDescribe().equals("")){
viewHolder.describe.setVisibility(0);
viewHolder.describe.setText(followInfo.getDescribe());
}
if (followInfo.getLikeStatus() == 1){
viewHolder.up.setVisibility(View.VISIBLE);
viewHolder.no_up.setVisibility(View.INVISIBLE);
} else {
viewHolder.up.setVisibility(View.INVISIBLE);
viewHolder.no_up.setVisibility(View.VISIBLE);
}
if (!followInfo.getCountry3().equals("")){
viewHolder.sign1.setVisibility(View.VISIBLE);
viewHolder.sign1.setText("#" + followInfo.getCountry3() + " ");
}
if (!followInfo.getFashion().equals("")){
viewHolder.sign2.setVisibility(View.VISIBLE);
viewHolder.sign2.setText("#" + followInfo.getFashion() + " ");
}
if (!followInfo.getScene().equals("")){
viewHolder.sign3.setVisibility(View.VISIBLE);
viewHolder.sign3.setText("#" + followInfo.getScene() + " ");
}
//图片设置
final String user_image = followInfo.getImage_id();
finalBitmap.display(viewHolder.iv,AndroidUtil.SERVER_PATH+ //finalBitmap加载图片
"imageLoad/load_image_buff/"+ user_image +"/00/0");
//头像设置图片
final String user_logoUrl = followInfo.getUser_id();
finalBitmap.display(viewHolder.user_logo,AndroidUtil.SERVER_PATH
+"imageLoad/load_user_image_buff/" + user_logoUrl);
if (followInfo.getTags() != null && followInfo.getTags().size() != 0){ //动态添加标签
for (int i = 0; i < followInfo.getTags().size(); i++){ //TAG数
float tranX;
float tranY;
View tag_layout;
final Tags tag = followInfo.getTags().get(i);
if (tag.getPercentX() == null || tag.getPercentX().equals("") || tag.getPercentX().equals("null")){
tranX = Float.parseFloat(tag.getTagX()) / 480 * layoutParams.width;
tranY = Float.parseFloat(tag.getTagY()) / 720 * layoutParams.height - AndroidUtil.dip2px(context, 8);
} else {
tranX = Float.parseFloat(tag.getPercentX()) * layoutParams.width;
tranY = Float.parseFloat(tag.getPercentY()) * layoutParams.height - AndroidUtil.dip2px(context, 8);
}
// Log.e("tranX", tranX + "");
// Log.e("tranY", tranY + "");
//链接图片是否占空间
int brandURLLength = 0;
boolean isBrandUrl = false;
if (tag.getBrandURL() != null && !tag.getBrandURL().equals("") && !tag.getBrandURL().equals("null")){
isBrandUrl = true;
brandURLLength = AndroidUtil.dip2px(context, 25);
}
//圆点及箭头及文字空白区域的长度和
int pointArrowLength = AndroidUtil.dip2px(context, 35);
//文字的长度
int textLength = AndroidUtil.getLineLength(tag.getBrand(), 28);
// Log.e("position", position + "");
TextView tag_text;
ImageView tag_brand;
// 判断左边显示还是右边显示
if (layoutParams.width - tranX >= brandURLLength + pointArrowLength + textLength){ //右边显示
tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX);
tag_layout.setTranslationY(tranY);
} else if (tranX < brandURLLength + pointArrowLength + textLength){ //显示不全
if (tranX * 2 < layoutParams.width){ //右边显示.但显示不全
tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_text.setWidth((int)(layoutParams.width
- tranX - brandURLLength - pointArrowLength + AndroidUtil.dip2px(context, 10)));
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX);
tag_layout.setTranslationY(tranY);
} else { //左边显示 不全
tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_text.setWidth((int)(tranX - brandURLLength - AndroidUtil.dip2px(context, 15)));
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationY(tranY);
}
} else { //左边显示
tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX - AndroidUtil.dip2px(context, 25) - textLength - brandURLLength);
tag_layout.setTranslationY(tranY);
}
tag_text.setText(tag.getBrand());
if (isBrandUrl){
tag_brand.setVisibility(View.VISIBLE);
}
viewHolder.fl.addView(tag_layout);
tag_text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(context, SearchResultActivity.class);
ArrayList<String> list = new ArrayList<String>();
list.add(tag.getBrand());
intent.putExtra("sign_cont", list);
intent.putExtra("from_flag", "&brand=");
context.startActivity(intent);
}
});
tag_brand.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (tag.getBrandURL() != null && !tag.getBrandURL().equals("")){
Uri uri = Uri.parse(tag.getBrandURL());
Intent intent = new Intent();
intent.setData(uri);
intent.setAction(Intent.ACTION_VIEW);
try{
context.startActivity(intent);
} catch (Exception e){
Toast toast = Toast.makeText(context,
context.getResources().getString(R.string.err_uri), Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 300);
toast.show();
}
}
}
});
}
}
addListener(convertView, followInfo, followInfo.getImage_id(), position);
}
else {
convertView = lmap.get(position);
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
public class ViewHolder{
ImageView user_logo;
TextView user_name;
TextView add_time;
ImageView iv;
TextView sign1;
TextView sign2;
TextView sign3;
Button up;
Button no_up;
TextView up_num;
ImageButton say_sth;
ImageButton share;
FrameLayout fl;
TextView describe;
}
public void addListener(final View convertView,final FollowInfo followInfo,
final String image_uri, final int position) {
final Button no_up = (Button) convertView.findViewById(R.id.no_up);
final Button yes_up = (Button) convertView.findViewById(R.id.yes_up);
final TextView up_num = (TextView) convertView.findViewById(R.id.up_num);
final ImageButton share = (ImageButton) convertView.findViewById(R.id.share);
final TextView sign1 = (TextView) convertView.findViewById(R.id.sign1);
final TextView sign2 = (TextView) convertView.findViewById(R.id.sign2);
final TextView sign3 = (TextView) convertView.findViewById(R.id.sign3);
final ImageButton say_sth = (ImageButton) convertView.findViewById(R.id.say_sth);
final ImageView user_logo = (ImageView) convertView.findViewById(R.id.user_logo);
final TextView user_name = (TextView) convertView.findViewById(R.id.user_name);
no_up.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
no_up.setVisibility(View.INVISIBLE);
yes_up.setVisibility(View.VISIBLE);
up_num.setText(Integer.parseInt(up_num.getText().toString()) + 1 + "");
new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id());
}
});
yes_up.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
no_up.setVisibility(View.VISIBLE);
yes_up.setVisibility(View.INVISIBLE);
up_num.setText(Integer.parseInt(up_num.getText().toString()) - 1 + "");
new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id());
}
});
}