【问题标题】:Android Gallery visible ImageView is null?Android Gallery可见ImageView为空?
【发布时间】:2012-10-02 16:09:07
【问题描述】:

我想为单击的图像视图画一个复选标记,并在使用以下代码片段之前取消选中我单击的图像视图。我将最后检查的位置存储在 mDeviceAdapter 中。当我尝试取消选中旧位置时,即使对于部分可见的图像视图,图像视图也总是给出 null。我真的很困惑,因为我认为只有不可见的被回收...... 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);

【问题讨论】:

    标签: android imageview gallery android-gallery


    【解决方案1】:

    这不是正确的方法。 您需要在数据类型中添加一个布尔字段(即 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.
        }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多