我想为我单击的图像视图绘制一个复选标记,并在使用以下代码片段之前取消选中我单击的imageview。我将最后检查的位置存储在mDeviceAdapter中。当我尝试取消选中旧位置时,即使对于部分可见图像视图,图像视图也始终为空。我真的很困惑,因为我认为只有隐形的一个被回收... Android中的新手和任何评论都表示赞赏。
public void CheckableImageView#setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
invalidate();
}
}
mDeviceGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
CheckableImageView viewToCheck = (CheckableImageView) view;
if (!viewToCheck.isChecked()) {
int oldCheckedPosition = mDeviceAdapter
.getCheckedPosition();
mDeviceAdapter.setCheckedPosition(position);
View checkedView = mDeviceGallery
.getChildAt(oldCheckedPosition);
Log.d(TAG, "old position="+oldCheckedPosition + "old view="+checkedView);
if (checkedView != null) {
((CheckableImageView) checkedView)
.setChecked(false);
Log.d(TAG, "uncheck position="
+ oldCheckedPosition);
}
viewToCheck.setChecked(true);
答案 0 :(得分:0)
这不是正确的做法。
您需要在数据类型中添加一个布尔字段(即mIsChecked)。
在onItemClick
方法上,将该变量的值设置为true,并将其INDEX保留为适配器的成员。单击另一个项目时,将该项目的值设置为true,并将保存的项目的值设置为false(更改您在上一次单击中存储的INDEX中ArrayList
中的数据类型的值)。
现在,在getView()
方法中,您必须具有if / else语句。类似的东西:
if (item.isChecked())
{
checkedView.setChecked(true);
}
else
{
checkedView.setChecked(false);
}
onClick
方法的示例:(只是一般方向)
if (item.isChecked())
{
checkedView.setChecked(false);
yourList.get(position).setChecked(true);
yourList.get(mLastCheckedIndex).setChecked(false);
mLastCheckedIndex = position;
notifyDataSetChanged();
}
else
{
//same but opposite.
}
希望这有帮助!