2013-07-11 32 views
1

我正在使用Facebook SDK開發Android應用程序。到目前爲止,該應用程序掃描某個頁面供稿並將所有帖子放入一個GridView中。我需要它,以便如果當前位置的imageArray值爲空或null(沒有圖片的帖子),則它會將ImageView可見性設置爲GONE並使TextView佔據整個項目。這裏是我的代碼:有條件地更改列表適配器android

公共查看getView(INT位置,視圖V的ViewGroup以及母公司){

MainListHolder mHolder; 
    if (v == null) { 
     mHolder = new MainListHolder(); 
     v = inflator.inflate(R.layout.list_item, null); 
     mHolder.img1 = (ImageView) v.findViewById(R.id.preview); 
     mHolder.txt2 = (TextView) v.findViewById(R.id.message); 
     mHolder.txt3 = (TextView) v.findViewById(R.id.user_name); 
     mHolder.txt4 = (TextView) v.findViewById(R.id.user_id); 
     v.setTag(mHolder); 
    } else { 
     mHolder = (MainListHolder) v.getTag(); 
    } 

    if (!imageArray.get(position).isEmpty()) { 
     manager.DisplayImage(imageArray.get(position), loader, mHolder.img1); 
    } 
    else { 
     manager.DisplayImage(null, loader, mHolder.img1); 
     mHolder.img1.setVisibility(ImageView.GONE); 
    } 
    mHolder.txt2.setText(messageArray.get(position)); 
    mHolder.txt3.setText(nameArray.get(position)); 
    mHolder.txt4.setText(idArray.get(position)); 

    return v; 
} 

的問題是在GridView現在改變它的項目,而我在滾動。即使該項目有圖片,ImageView也會消失。我該如何解決?

回答

1

您的問題是在這部分代碼:

if (!imageArray.get(position).isEmpty()) { 
    manager.DisplayImage(imageArray.get(position), loader, mHolder.img1); 
} 
else { 
    manager.DisplayImage(null, loader, mHolder.img1); 
    mHolder.img1.setVisibility(ImageView.GONE); 
} 

所以如果ImageView的圖像不存在,你讓IMG1不見了。但是,如果圖像存在,滾動後img1仍然保持GONE,因爲您沒有調用mHolder.img1.setVisibility(ImageView.VISIBLE)。發生這種情況是因爲當你滾動時,你的listItem視圖是回收的,所以在適配器中你必須始終對待這兩種情況。

所以你的代碼shold是這樣的:

if (!imageArray.get(position).isEmpty()) { 
    mHolder.img1.setVisibility(ImageView.VISIBLE); 
    manager.DisplayImage(imageArray.get(position), loader, mHolder.img1); 
} 
else { 
    manager.DisplayImage(null, loader, mHolder.img1); 
    mHolder.img1.setVisibility(ImageView.GONE); 
} 

實例更好地理解問題:

試想在列表適配器getView代碼()mehod:

if(isEnabled) { 
    textView.setText("ENABLED"); 
} 

在這種情況下textV瀏覽器將始終顯示滾動後的文本ENABLED,因爲沒有其他部分,其中textview將顯示其他文本。 所以代碼應該看起來像:

if(isEnabled) 
    textView.setText("ENABLED"); 
else 
    textView.setText("DISABLED"); 

希望它能幫助你。

+0

我實際上只是在看到這個答案之前想過那個時刻,並且你確認了它。它現在有效!謝謝! – reyley96

+0

我很高興我能幫忙:) – koso

相關問題