2016-03-11 123 views
2

我有一個名爲「show_in_list」的字段設置爲true或false的api。在我的適配器爲我的看法回收我已經這樣做了RecyclerView不隱藏某些項目

public class EmoticonAdapter extends RecyclerView.Adapter<EmoticonAdapter.ViewHolder> { 

private Context mContext; 
private EmoticonResponse mEmoticon; 
private Emoticons mEmoticons; 

public class ViewHolder extends RecyclerView.ViewHolder { 

    private ImageView mEmoticonButton; 

    public ViewHolder(View v) { 
     super(v); 

     mEmoticonButton = (ImageView) v.findViewById(R.id.emoticonImages); 
    } 
} 

public EmoticonAdapter(Context context, EmoticonResponse response) { 
    mContext = context; 
    mEmoticon = response; 

    if (mEmoticon == null) { 
     mEmoticon = new EmoticonResponse(); 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view; 

    view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.grid_item_emoticon, parent, false); 

    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    mEmoticons = mEmoticon.getItem(position); 

    if (mEmoticons.getEmoticon().getUrl() != null) { 
     if (mEmoticons.getEmoticon().getShow_in_list().equalsIgnoreCase("true")) { 
      Picasso.with(mContext) 
        .load(mEmoticons.getEmoticon().getUrl()) 
        .into(holder.mEmoticonButton); 

      holder.mEmoticonButton.setVisibility(ImageView.VISIBLE); 
      holder.mEmoticonButton.setClickable(true); 
     } 

    } 

} 

@Override 
public int getItemCount() { 
    return mEmoticon.getItems().size(); 
} 

} 

和我的XML看起來像這樣的項目在RecyclerView

<ImageView 
    android:id="@+id/emoticonImages" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:clickable="false" 
    android:visibility="gone"/> 

我遇到的問題是,當我加載視圖有些項目不可見,但會在其他項目之間造成巨大差距,您仍然可以點擊它們。

enter image description here

它是什麼,我做錯了嗎?我正在做所有的教科書,但我必須錯過一些正確的東西?

編輯全班已添加

+0

你的按鈕的可見性設置爲走了,但持有人是可見的。你需要着眼於讓'onBindViewHolder()'不被調用,你不想顯示的項目。 –

+0

@howdoidothis我該怎麼做呢? – BilalMH

+0

發佈您的整個班級,以便我可以提供更好的幫助。你需要做的是過濾數據集,使它只包含可見項,這樣當調用'.getItemCount()'時,它會返回可見項的數量。所以這個視圖只用可見數量的持有者來創建 –

回答

3

在適配器構造函數中,解析整個表情符號數據集,並僅將那些應該可見的元素添加到mEmoticons。因此,getItemCount()返回您想要顯示的項目數量,因此只創建了多個持有人。

你的命名是非常令人迷惑,所以我猜的幾件事情,解決這些和嘗試這個代碼:

List<Emoticon> filteredEmoticons; // change the class here to what it is in your project 

public EmoticonAdapter(Context context, EmoticonResponse response) { 
    mContext = context; 
    mEmoticon = response; 

    if (mEmoticon == null) { 
     mEmoticon = new EmoticonResponse(); 
    } 

    filteredEmoticons = new ArrayList<Emoticon>(): 

    for (Emoticon emoticon : mEmoticon.getItems()) { 
     if (emoticon.getUrl() != null) { 
      if (emoticon.getShow_in_list().equalsIgnoreCase("true")) { 
       filteredEmoticons.add(emoticon); 
      } 
     } 
    } 
} 

@Override 
public int getItemCount() { 
    return filteredEmoticons.size(); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.mEmoticonButton.setVisibility(ImageView.VISIBLE); 
    holder.mEmoticonButton.setClickable(true); 
} 
+0

準確地說,我只是建議。 – Kuffs

+0

:)確認總是讓人安心,ty –

+0

@BilalMH另外,如果你這樣做,你可能甚至不需要使按鈕可見+動態點擊,你可以在.xml中執行這些操作。 –

0

在這裏你只隱藏ImageView但視圖將一直存在,並採取一定的空間。
一個更好的解決方案是過濾你的項目。我不知道如何以及當你設置mEmoticon,但如果你刪除它的無用的項目,它會很好。

注意getItemCount()沒有你無用的物品會返回好尺寸。

+0

mEmoticon只是被聲明爲一個全局變量。我不會將它用作其他任何東西。我真的不知道如何去做你所說的 – BilalMH

+0

你可以發佈你的整個班級嗎? –

+0

補充,請參閱上面:) – BilalMH