2016-10-13 32 views
0

我有代碼:獲取內部onCreateViewholder當前位置recyclerview的Android

@Override 
public CustomRatingHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(
      R.layout.custom_rating_lyt, null); 

    CustomRatingReviews ratingObj = (null != mRatingLst && position < mRatingLst.size()) ? 
      mRatingLst.get(position) : null; 

    CustomRatingHolder viewHolder = new CustomRatingHolder(mAdapContext, ratingObj, view); 
    position++; 
    return viewHolder; 
} 

我想回收適配器的onCreateViewHolder內的當前位置。任何人都可以幫我解決這個問題。提前致謝。

回答

3

不知道你期望達到的目標。爲集合中的每個對象調用onCreateViewHolder一次,以便綁定膨脹必要的佈局並查找所有視圖。您可以擡高不同的佈局,並結合基於整數的不同ViewHolders:onCreateViewHolder(ViewGroup parent, int viewType)

如果您有需要重寫getItemViewType方法,將與項目位置調用,所以你能確定你所需要的視圖類型不同視圖類型。此方法返回一個int,您將在onCreateViewHolder中收到。

這裏是一個很好的例子:

@Override 
public int getItemViewType(int position) { 
    final Object dataObj = mDataSet.get(position); 

    if (dataObj instanceof String) { 
     return 0; 
    } 

    if (dataObj instanceof User) { 
     return 1; 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    switch(viewType) { 
     case 0: 
     return new StringViewHolder(...); 

     case 1: 
     return new UserViewHolder(...); 
    } 
} 

我在你的代碼,你是在ViewHolder的構造函數發送數據看。這違背了這個類的用途,因爲對於一個對象類型你只有一個ViewHolder實例,並且只需要保存佈局視圖信息,因此每次需要綁定一個對象時都不需要查找視圖。實際上,你需要使用onBindViewHolder爲了綁定你的對象,例如:

public void onBindViewHolder(UsersGroupsAdapter.ViewHolder holder, int position) { 
    // or something similar 
    holder.bind(mData.get(position)); 
} 

希望這有助於。

2

我想你需要:

getAdapterPosition(); 
+1

getAdapterPosition是RecyclerView.ViewHolder抽象類而不是RecyclerView.Adapter類的方法。 –