当前位置: 代码迷 >> Android >> 自定义Adapter中的checkbox取不到,该如何解决
  详细解决方案

自定义Adapter中的checkbox取不到,该如何解决

热度:32   发布时间:2016-04-28 04:20:04.0
自定义Adapter中的checkbox取不到
public class ...... extends Activity {
......

listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//想在此处对如下的checkbox(在同一个java文件中)进行操作,试过很多办法但是总是获取不到checkbox对象
}
-----------------------------------------------------------------------------------------------------------------------
class ...... extends BaseAdapter
......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView=li.inflate(resource,null);
checkbox=(CheckBox) convertView.findViewById(R.id.mswitch);
}
}

求高手指点,小弟感激不尽
------解决方案--------------------
checkbox不用设置全局变量
在adapter中这么设置.
class ...... extends BaseAdapter
......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
       ViewHolder holder = null;
      if (convertView == null) {
  holder = new ViewHolder();
 convertView = li.inflate(R.layout.布局, null);
convertView.setTag(holder);
   } else {
holder = (ViewHolder) convertView.getTag();
    }

  holder.checkbox=(CheckBox) convertView.findViewById(R.id.mswitch);
  }
}
public final class ViewHolder {
    public CheckBox checkbox;
}
然后在事件中
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox cb = (CheckBox) view.findViewById(R.id.mswitch);
}
我做的是可以获取的checkbox的。我做的是选择记录,选中则添加,取消则删除,没有问题。
------解决方案--------------------
在适配器里,不能单独的设置全局变量,这样你等到的是最后一个item的checkBox.
你要设置局部变量,但是设置局部变量有有个问题了.
就是局部变量会导致匿名内部类无法使用这个局部变量.这个时候就需要再定义一个final 变量
这个很楼上说的效果是一样的.注意,楼上的ViewHolder是一个final类
  相关解决方案