zhf_827 2016-07-05 10:09 采纳率: 75%
浏览 986
已结题

listview 中,滑动liseview会导致其他没有点击情况的item也会出现图片的改变

public class CallAdapter extends BaseAdapter{
private int table_sum = 6;
private Context mContext;
private LayoutInflater layoutInflater;

public CallAdapter(Context context, int cur_pos){
    this.mContext = context;
    this.layoutInflater = LayoutInflater.from(this.mContext);

}

public int getCount() {
    return table_sum;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
     GameListHolder gameListHolder = null;

    if (convertView == null) {
        convertView = this.layoutInflater.inflate(
                R.layout.lianhuantouzhu_list_item, null);
        gameListHolder = new GameListHolder();

        gameListHolder.rl_list_item_1 = (RelativeLayout) convertView
                .findViewById(R.id.rl_list_item_1);
        gameListHolder.rl_list_item_4 = (RelativeLayout) convertView
                .findViewById(R.id.rl_list_item_4);
        gameListHolder.rl_list_item_2 = (RelativeLayout) convertView
                .findViewById(R.id.rl_list_item_2);
        gameListHolder.rl_list_item_5 = (RelativeLayout) convertView
                .findViewById(R.id.rl_list_item_5);

        gameListHolder.rl_call = (RelativeLayout) convertView
                .findViewById(R.id.rl_call);

        gameListHolder.ll_line_blue = (TextView) convertView
                .findViewById(R.id.ll_line_blue);
        gameListHolder.ll_line_green = (TextView) convertView
                .findViewById(R.id.ll_line_green);
        gameListHolder.ll_line_red = (TextView) convertView
                .findViewById(R.id.ll_line_red);

        gameListHolder.iv_small_chip1 = (ImageView)convertView.
                 findViewById(R.id.iv_small_chip1);
        gameListHolder.iv_small_chip2 = (ImageView)
                convertView.findViewById(R.id.iv_small_chip2);
        gameListHolder.iv_small_chip3 = (ImageView)
                convertView.findViewById(R.id.iv_small_chip3);
        gameListHolder.iv_small_chip4 = (ImageView)
                convertView.findViewById(R.id.iv_small_chip4);
        gameListHolder.iv_small_chip5 = (ImageView)
                convertView.findViewById(R.id.iv_small_chip5);

        gameListHolder.rl_desktop_1 = (RelativeLayout) convertView
                .findViewById(R.id.rl_desktop_1);

        gameListHolder.rl_desktop_2 = (RelativeLayout) convertView
                .findViewById(R.id.rl_desktop_2);
        gameListHolder.rl_desktop_3 = (RelativeLayout) convertView
                .findViewById(R.id.rl_desktop_3);
        gameListHolder.rl_desktop_4 = (RelativeLayout) convertView
                .findViewById(R.id.rl_desktop_4);
        gameListHolder.rl_desktop_5 = (RelativeLayout) convertView
                .findViewById(R.id.rl_desktop_5);


        convertView.setTag(gameListHolder);
    } 
    else {
        gameListHolder = (GameListHolder) convertView.getTag();
    }

    //添加事件
        gameListHolder.rl_desktop_1.setOnClickListener(new DesktopClickListener(gameListHolder.iv_small_chip1));
        gameListHolder.rl_desktop_2.setOnClickListener(new DesktopClickListener(gameListHolder.iv_small_chip2));
        gameListHolder.rl_desktop_3.setOnClickListener(new DesktopClickListener(gameListHolder.iv_small_chip3));
        gameListHolder.rl_desktop_4.setOnClickListener(new DesktopClickListener(gameListHolder.iv_small_chip4));
        gameListHolder.rl_desktop_5.setOnClickListener(new DesktopClickListener(gameListHolder.iv_small_chip5));

    return convertView;

}

/**

 * @remark 点击事件
 *
 */
class DesktopClickListener implements OnClickListener {
    ImageView iv;
    DesktopClickListener( final ImageView iv) {
        this.iv = iv;
    }
    @Override
    public void onClick(View v) {
        if (GameActivity.cur_pos == -1) {
        } else {
            this.iv.setImageResource(SysConstant.chip_smallID[GameActivity.cur_pos]);

        }

        listview 中,如我上面的代码中有6个item,每个item中都有5个relativelayout,当我点击其中一个item的任意一个relativelayout时(每个relativelayout都包含一个imageview控件),会改变对应这个相对布局中imageview的资源,此时当我滑动liseview会出现其他item中(没有点击情况)的imageview也会出现图片资源的改变



        上面是我的baseadapte的完整代码,我网上查了,由于复用导致的这个问题的,就是说滑动listview的时候,可见的item会复用不可见item里的数据,需要进行绑定状态才能OK,但是我试了下,还是不能达到效果。求哪位大侠帮指点下,根据我上面的代码如何才能时点击任意一个item中改变对应的图片后,滑动item ,其他的item保证状态不变,求大虾们能指出在哪里添加状态,详细点最好,我把我剩余的c币都给大家*(也不多)。求大虾们帮帮忙!
  • 写回答

4条回答 默认 最新

  • daweibalang717 2016-07-05 10:27
    关注

    看不懂你的描述,但是你这么写会有问题,你把添加事件那部分代码放到 if (convertView == null) {}else{} 后面 return convertView之前 ,添加事件 放错位置了。

    评论

报告相同问题?

悬赏问题

  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块