Android Gallery可见ImageView为空?

时间:2012-10-02 16:09:08

标签: android imageview gallery android-gallery

我想为我单击的图像视图绘制一个复选标记,并在使用以下代码片段之前取消选中我单击的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);

1 个答案:

答案 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.
    }

希望这有帮助!