解决方案 »

  1.   

    getview使用了Viewholder?是的话检查下判断语句是否有遗漏,导致沿用了前面的view
      

  2.   

    adapter的问题,写一个map记录当前item的点赞状态,如果是赞的为true,没赞的false,下次getview的时候判断这个map,因为每一个item都会重新getview
      

  3.   

    使用了之前点赞了的view,是否点赞都要在代码设置背景if(....){
      iv.set....
    }else{
      iv.set...
    }
      

  4.   

    getview里面设置点赞背景的时候,代码都要设置背景
    if(...){
       iv.set...
    }else{
     iv.set...
    }
      

  5.   

    private HashMap<Integer, Boolean> isCanClick;
    private int current_position = -1;getview里
    if (isCanClick.get(position) == false) {
    空白的红心
    } else {
    点过赞的红心
    }
    点击事件
    holder.praise_rl.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {

    isCanClick.put(current_position, true);
    }
    });
      

  6.   

    adapter的getview里
    有if
    就要有else
      

  7.   

    因为 convertview沿用了之前的view ,所以如果想要显示当前view状态的话 要把之前的状态覆盖掉
      

  8.   

    让我来告诉你,记得设置tag,ok?把你的代码贴出来我看看
      

  9.   

    赞同,以前遇到错乱问题也是因为有个view没有做任何操作
      

  10.   

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { final OutPara1301Item item = (OutPara1301Item) getItem(position);
    final ViewHolder viewHolder;
    if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.fragment3_items, parent,
    false);
    viewHolder = new ViewHolder();
    viewHolder.content = (TextView) convertView
    .findViewById(R.id.content);
    viewHolder.like_count = (TextView) convertView
    .findViewById(R.id.isLikeNum);
    viewHolder.comment_count = (TextView) convertView
    .findViewById(R.id.messageNum);
    viewHolder.name = (TextView) convertView.findViewById(R.id.name);
    viewHolder.like = (ImageView) convertView.findViewById(R.id.like);
    viewHolder.message = (ImageView) convertView
    .findViewById(R.id.message);
    viewHolder.pid = (TextView) convertView.findViewById(R.id.pid);
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    }
    // 设置item的背景色 #00ff00
    String color = "#" + item.bg_color;
    convertView.setBackgroundColor(Color.parseColor(color));
    viewHolder.content.setText(item.post_content);
    viewHolder.like_count.setText(StringUtils
    .getDisplayNum(item.like_count));
    viewHolder.comment_count.setText(StringUtils
    .getDisplayNum(item.comment_count));
    viewHolder.name.setText(StringUtils.convertFroType(item.from_type));
    viewHolder.pid.setText(item.pid + "");
    viewHolder.like.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) { int num = 0;
    if (!"".equals(viewHolder.like_count.getText()))
    num = new Integer(viewHolder.like_count.getText()
    .toString());
    num++;
    ((ImageView) v).setImageResource(R.drawable.like);
    viewHolder.like_count.setText(num + "");
    Toast.makeText(context, "是否点赞" + num, Toast.LENGTH_SHORT)
    .show();
    }
    });
    return convertView;
    }
    这是我的代码 大家帮忙看下
      

  11.   

    代码还给你...@Override
    public View getView(int position, View convertView, ViewGroup parent) {final OutPara1301Item item = (OutPara1301Item) getItem(position);
    final ViewHolder viewHolder;
    if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.fragment3_items, parent,
    false);
    viewHolder = new ViewHolder();
    viewHolder.content = (TextView) convertView
    .findViewById(R.id.content);
    viewHolder.like_count = (TextView) convertView
    .findViewById(R.id.isLikeNum);
    viewHolder.comment_count = (TextView) convertView
    .findViewById(R.id.messageNum);
    viewHolder.name = (TextView) convertView.findViewById(R.id.name);
    viewHolder.like = (ImageView) convertView.findViewById(R.id.like);
    viewHolder.message = (ImageView) convertView
    .findViewById(R.id.message);
    viewHolder.pid = (TextView) convertView.findViewById(R.id.pid);
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    }
    // 设置item的背景色 #00ff00
    String color = "#" + item.bg_color;
    convertView.setBackgroundColor(Color.parseColor(color));
    viewHolder.content.setText(item.post_content);
    viewHolder.like_count.setText(StringUtils
    .getDisplayNum(item.like_count));
    viewHolder.comment_count.setText(StringUtils
    .getDisplayNum(item.comment_count));
    viewHolder.name.setText(StringUtils.convertFroType(item.from_type));
    viewHolder.pid.setText(item.pid + "");
    if ("".equals(viewHolder.like_count.getText())){
     viewHolder.like.setImageResource(R.drawable.like_default);
    }else{
    viewHolder.like.setImageResource(R.drawable.like);
    }

    viewHolder.like.setOnClickListener(new OnClickListener() {@Override
    public void onClick(View v) {int num = 0;
    if (!"".equals(viewHolder.like_count.getText()))
    num = new Integer(viewHolder.like_count.getText()
    .toString());
    num++;
    ((ImageView) v).setImageResource(R.drawable.like);
    viewHolder.like_count.setText(num + "");
    Toast.makeText(context, "是否点赞" + num, Toast.LENGTH_SHORT)
    .show();
    }
    });
    return convertView;
    }
      

  12.   

    (⊙o⊙)… 什么问题 帮忙看看啊
    代码帮你改了啊,就看我这楼的代码(⊙o⊙)… 什么问题 帮忙看看啊
    代码帮你改了啊,就看我这楼的代码这个..之判断text为k空 不行吧
      

  13.   

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { final OutPara1301Item item = (OutPara1301Item) getItem(position);
    final ViewHolder viewHolder;
    if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.fragment3_items, parent,
    false);
    viewHolder = new ViewHolder();
    viewHolder.content = (TextView) convertView
    .findViewById(R.id.content);
    viewHolder.like_count = (TextView) convertView
    .findViewById(R.id.isLikeNum);
    viewHolder.comment_count = (TextView) convertView
    .findViewById(R.id.messageNum);
    viewHolder.name = (TextView) convertView.findViewById(R.id.name);
    viewHolder.like = (ImageView) convertView.findViewById(R.id.like);
    viewHolder.message = (ImageView) convertView
    .findViewById(R.id.message);
    viewHolder.pid = (TextView) convertView.findViewById(R.id.pid);
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    }
    // 设置item的背景色 #00ff00
    String color = "#" + item.bg_color;
    convertView.setBackgroundColor(Color.parseColor(color));
    viewHolder.content.setText(item.post_content);
    viewHolder.like_count.setText(StringUtils
    .getDisplayNum(item.like_count));
    viewHolder.comment_count.setText(StringUtils
    .getDisplayNum(item.comment_count));
    viewHolder.name.setText(StringUtils.convertFroType(item.from_type));
    viewHolder.pid.setText(item.pid + "");
    viewHolder.like.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) { int num = 0;
    if (!"".equals(viewHolder.like_count.getText()))
    num = new Integer(viewHolder.like_count.getText()
    .toString());
    num++;
    ((ImageView) v).setImageResource(R.drawable.like);
    viewHolder.like_count.setText(num + "");
    Toast.makeText(context, "是否点赞" + num, Toast.LENGTH_SHORT)
    .show();
    }
    });
    return convertView;
    }
    这是我的代码 大家帮忙看下listView 的item是循环使用的,你在点击的时候设置了image,但是这个view在你滑动list的时候,还会被用到,所以就出现了你看到的,隔几个item就会有一个红心。
    这种情况,我的做法是
    1. 点击的时候不是直接set view,而是标记adapter的数据,哪一个被点过了
    2. notifyDataChange,在getView里设置 1 里被标记的数据红心
      

  14.   

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { final OutPara1301Item item = (OutPara1301Item) getItem(position);
    final ViewHolder viewHolder;
    if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.fragment3_items, parent,
    false);
    viewHolder = new ViewHolder();
    viewHolder.content = (TextView) convertView
    .findViewById(R.id.content);
    viewHolder.like_count = (TextView) convertView
    .findViewById(R.id.isLikeNum);
    viewHolder.comment_count = (TextView) convertView
    .findViewById(R.id.messageNum);
    viewHolder.name = (TextView) convertView.findViewById(R.id.name);
    viewHolder.like = (ImageView) convertView.findViewById(R.id.like);
    viewHolder.message = (ImageView) convertView
    .findViewById(R.id.message);
    viewHolder.pid = (TextView) convertView.findViewById(R.id.pid);
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    }
    // 设置item的背景色 #00ff00
    String color = "#" + item.bg_color;
    convertView.setBackgroundColor(Color.parseColor(color));
    viewHolder.content.setText(item.post_content);
    viewHolder.like_count.setText(StringUtils
    .getDisplayNum(item.like_count));
    viewHolder.comment_count.setText(StringUtils
    .getDisplayNum(item.comment_count));
    viewHolder.name.setText(StringUtils.convertFroType(item.from_type));
    viewHolder.pid.setText(item.pid + "");
    viewHolder.like.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) { int num = 0;
    if (!"".equals(viewHolder.like_count.getText()))
    num = new Integer(viewHolder.like_count.getText()
    .toString());
    num++;
    ((ImageView) v).setImageResource(R.drawable.like);
    viewHolder.like_count.setText(num + "");
    Toast.makeText(context, "是否点赞" + num, Toast.LENGTH_SHORT)
    .show();
    }
    });
    return convertView;
    }
    这是我的代码 大家帮忙看下listView 的item是循环使用的,你在点击的时候设置了image,但是这个view在你滑动list的时候,还会被用到,所以就出现了你看到的,隔几个item就会有一个红心。
    这种情况,我的做法是
    1. 点击的时候不是直接set view,而是标记adapter的数据,哪一个被点过了
    2. notifyDataChange,在getView里设置 1 里被标记的数据红心隐约优点明白了 谢谢了