2013-01-19 56 views
1

我有一個帶有自定義適配器的ListView。在每一行都有一個ImageView,只有在一定的限制條件下才可見。問題是,如果第一行有這個ImageView可見,那麼它也是最後一行,反之亦然。ListView中最後一項ImageView的奇怪行爲

這是我的適配器的getView()代碼。

public View getView(int position, View view, ViewGroup parent) { 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.row_idea, null); 
    } 

    Idea idea = mIdeas.get(position); 

    if (idea != null) { 
     ImageView imgAlarm = (ImageView) view 
       .findViewById(R.id.imgAlarm_rowIdea); 
     if (idea.getTimeReminder() != null) 
      imgAlarm.setVisibility(ImageView.VISIBLE); 

     TextView lblTitle = (TextView) view 
       .findViewById(R.id.lblTitle_rowIdea); 
     lblTitle.setText(idea.getTitle()); 

     TextView lblDescription = (TextView) view 
       .findViewById(R.id.lblDescription_rowIdea); 
     lblDescription.setText(idea.getDescription()); 
    } 
    return view; 
} 

mIdeasArrayList與所有在ListView顯示的數據。 imgAlarm是我上面告訴的ImageView

回答

2

變化

if (idea.getTimeReminder() != null) 
      imgAlarm.setVisibility(ImageView.VISIBLE); 

if (idea.getTimeReminder() != null) 
      imgAlarm.setVisibility(ImageView.VISIBLE); 
else 
      imgAlarm.setVisibility(ImageView.GONE); 

這裏發生的事情是適配器是「回收」的意見。所以在你看到你的測試中,最後一個視圖和第一個視圖實際上是同一個實例。

+0

好吧,它的工作真的很感謝你! –

2

你要恢復的ImageView的可見性狀態,如果條件不滿足,所以你不要有一個潛在的回收視圖的問題(其中可能有ImageView已經可見,並且出現時,它不應該) :

if (idea.getTimeReminder() != null) { 
    imgAlarm.setVisibility(ImageView.VISIBLE); 
} else { 
    imgAlarm.setVisibility(ImageView.INVISIBLE); // or GONE 
}