解决方案 »

  1.   

    OnItemClickListener里的 v 就是你的item的LinearLayout了,直接find就可以了
      

  2.   

    第一个问题是listView的缓存问题,请仔细检查getView方法的实现;第二个问题是越界导致的。
      

  3.   

    listview里有checkbox确实会有问题 跟listvie的复用机制有关 你可以用hashmap把选中状态跟postion保持一下 getview方法先全部设置未选中 然后根据hashmap的值 设置哪些为选中
      

  4.   

    OnItemClickListener itemListener = new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> l, View v, int position, long id) {
                LinearLayout view1 = (LinearLayout) l.getChildAt(position);//实际不是滑动到最后,只要往上滑动一个就会出错。listview的item复用问题。没滚动没报错是因为刚好有一屏幕对应的布局。LinearLayout view1 = (LinearLayout) v;
                RelativeLayout view = (RelativeLayout) view1.getChildAt(1);  //滑动到底点击,程序崩溃之后显示这一行有错。。不知道为什么
                CheckBox checkBox = (CheckBox) view.getChildAt(4);
                checkBox.toggle();
                 
                System.out.println("clickPosition    " + position);
    //            HideApplicationInfoAdapter.getIsSelected().put(position,
    //                    checkBox.isChecked());
            }
        };
      

  5.   

    我觉得你换个思路来写你的代码。check与否是你的数据问题,你OnItemClick 只需要去更新一下数据,然后用NotifyDataChanged来更新view不就好了。你现在这样子的做法,点击了之后,你adapter里的数据和你期望就已经不匹配了。
      

  6.   

    public ViewHolder(View view) {
                this.appIcon = (ImageView) view.findViewById(R.id.imgApp);
                this.tvAppLabel = (TextView) view.findViewById(R.id.tvAppLabel);
                this.tvPkgName = (TextView) view.findViewById(R.id.tvPkgName);
                this.checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
            }
    去抓取各個view的這段應該不能只在convertview=null的時候執行,這樣會重複一直用到一樣的item去放資料,
    這段應該每次getview()都必須做一次詳細點說
    findviewbyId的動作應該移到這段前面
            AppInfo appInfo = (AppInfo) getItem(position);
            holder.appIcon.setImageDrawable(appInfo.getAppIcon());....