2014-11-05 80 views
0

我有一個列表視圖,它有兩種不同的佈局類型。帶有Viewholder的Android Listview返回重複條目

1:共享 2:不共享

簡單。

我正在使用一個viewholder來處理回收,但由於某些原因,我仍然在列表視圖中獲取重複條目。

BIG NOTE:我不想根據項目在列表視圖上的位置來更改佈局,因此我不認爲使用getItemViewType會有所幫助,那麼我可能會錯誤。

我正在改變項目佈局,取決於從數據庫傳回的布爾值。

下面是代碼:

@Override 
public View getItemView(final StatusItem status, View convertView, ViewGroup parent) { 

    View view = convertView; 

    // we'll set up the ViewHolder 
    ViewHolder viewHolder; 

    shared = status.getShared(); 

    if (view == null) { 
     // If view is null 
     viewHolder = new ViewHolder(); 

     if (shared) { 
      // if the status is shared use this layout 
      view = mInflater.inflate(R.layout.status_list_view_item_shared, parent, false); 
      viewHolder.OUserName = (TextView) view.findViewById(R.id.OUserName); 
      viewHolder.OUserName.setText("@" + status.getOUN()); 

      viewHolder.sharedText= (TextView) view.findViewById(R.id.sharedText); 
      viewHolder.sharedText.setText(status.getSharedStatus()); 
     } else { 
      // if the status is not shared use this layout 
      view = mInflater.inflate(R.layout.status_list_view_item, parent, false); 
     } 

     mListViewReferences(view, status, viewHolder); 
     loadProfileImages(status, viewHolder); 
     view.setTag(viewHolder); 
    } else { 
     // we've just avoided calling findViewById() on resource everytime 
     viewHolder = (ViewHolder) view.getTag(); 
    } 

這裏是我的viewHolder

private static class ViewHolder { 
    TextView statusUserName, timePosted, OUserName, sharedText, commentCounter, likeCounter, statusText; 
    ImageButton statusLike, statusComments, statusShare, statusMenu; 
    ImageView statusProfilePic; 
    LinearLayout likeCounterLayout, commentCounterLayout; 

} 

回答

2

試試這個兄弟或爵士?

@Override 
public View getItemView(final StatusItem status, View convertView, ViewGroup parent) { 

View view = convertView; 

// we'll set up the ViewHolder 
ViewHolder viewHolder; 

shared = status.getShared(); 

if (view == null) { 
    // If view is null 
    viewHolder = new ViewHolder(); 

    if (shared) { 
     // if the status is shared use this layout 
     view = mInflater.inflate(R.layout.status_list_view_item_shared, parent, false); 
     viewHolder.OUserName = (TextView) view.findViewById(R.id.OUserName); 
     viewHolder.OUserName.setText("@" + status.getOUN()); 

     viewHolder.sharedText= (TextView) view.findViewById(R.id.sharedText); 
     viewHolder.sharedText.setText(status.getSharedStatus()); 
    } else { 
     // if the status is not shared use this layout 
     view = mInflater.inflate(R.layout.status_list_view_item, parent, false); 
    }   
} else { 
    // we've just avoided calling findViewById() on resource everytime 
    viewHolder = (ViewHolder) view.getTag(); 
} 

mListViewReferences(view, status, viewHolder); 
loadProfileImages(status, viewHolder); 
view.setTag(viewHolder); 
} 

複製,粘貼和嘗試..確保它們是你的視野之外爲空,如果條件和你的getview內部方法

+0

笑哇,我簡直不敢相信它是如此簡單。我以前是這樣做的,但具有不同的邏輯,所以我仍然得到重複的條目。猜猜我在整個過程中迷失了方向,忘記把它放回if/else語句之外。 IT是幾小時或節目對你做的事情。非常感謝。 – user123859 2014-11-05 02:59:58

+0

大聲笑..我可以做的是el el el,並且也要感謝你..以及你所說的「IT是什麼時間或節目對你做什麼」,這是非常真實的,這就是爲什麼你總是重新檢查代碼。 ...快樂的編碼.. @ user123859 – Elltz 2014-11-05 03:02:18