我遇到了onItemClickListener的问题。 我有一个列表视图,行包含一个复选框,我想设置一个完整行的点击。 当我点击一行时,应该选中或取消选中复选框取决于条件。
现在的问题是我无法在onItemClickListener中获取复选框视图,以便我可以执行进一步的操作。
请查看以下代码:
适配器getView():
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder vHolder;
if (convertView == null) {
vHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.row_comparelist, null);
vHolder.chkSelected = (CheckBox) convertView
.findViewById(R.id.cbRow);
vHolder.chkSelected.setId(position);
convertView.setTag(vHolder);
vHolder.chkSelected.setTag(listObjects.get(position));
} else {
vHolder = (ViewHolder) convertView.getTag();
vHolder.chkSelected.setTag(listObjects
.get(position));
}
vHolder.chkSelected.setChecked(listObjects.get(position).getSelected());
return convertView;
}
活动onItemClick:
@Override
public void onItemClick(AdapterView<?> adapter, View view, int pos, long arg3) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) view.findViewById(R.id.cbRow);
}
在上面的代码中,它总是返回null值。
其他解决方案是什么?
编辑: 我知道我可以通过设置OnCheckedChangeListener或onClickListener在Adapter内部完成它,但由于其他条件,我无法做到这一点。所以请建议一个只能与onItemClickListener一起使用的解决方案。
答案 0 :(得分:2)
您为onClick编写的代码完全正确,但从该行返回null的原因是:
vHolder.chkSelected.setId(position);
您正在将R.id.cbRow
的值更改为项目position
的值!
因此,当您尝试按R.id.cbRow
的值检索视图时,它必须返回null。
答案 1 :(得分:1)
在getview()函数中使用它。在适配器类..
vHolder.chkSelected.setOnClickListener(this);
并在getview()方法
之后为复选框添加单击侦听器 @Override
public void onClick(View view) {
try {
CheckBox cb = (CheckBox) view;
int id = cb.getId();
// do your code here..
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
快乐编码!!
答案 2 :(得分:0)
只需获取checkBox在getView方法中的主布局ID,然后单击该布局就会更改checkBox的选择。 例如。 你有XML格式
<LinearLayout
android:id="@linear_layout"
android:layout_width.... >
<CheckBox
android:id="@checkBox"
android:layout_width.../>
</LinearLayout>
现在在getView
LinearLayout linLay = findViewById(R.id.linear_layout);
CheckBox checkBox = findViewById(R.id.checkBox);
和
linlay.setOnClickListener(new OnClick...{
checkBox.setChecked(!checkBox.isChecked());
});
还要检查this