2012-10-02 28 views
1

我想繪製圖像視圖的複選標記,然後單擊並取消選中在使用以下代碼片段之前單擊的imageview。我將最後一次檢查的位置存儲在mDeviceAdapter中。當我嘗試取消選中舊位置時,即使是部分可見圖像視圖,圖像視圖也始終爲空。我真的很困惑,因爲我認爲只有看不見的東西被回收... Android中的新手和任何評論,讚賞。Android圖庫可見ImageView爲null?

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

這不是正確的做法。 您需要爲您的數據類型添加一個布爾字段(即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. 
    } 

希望這有助於!

相關問題