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类