RecyclerView вывод данных по условию

153
07 июня 2018, 08:00

Имею адаптер RecyclerView в который передаю ArrayList<MyList>. ArrayList<MyList> myList;

В onBindViewHolder проверяю условие

if(myList.isShown) //показываю данные.

Например в myList 100 записей, 5 из которых myList.isShown == true. RecyclerView где myList.isShown == true выводит данные,а где myList.isShown == false выводит пустые яцейки.Как вывести только нужные ячейки?

Answer 1

Вам нужно каждый раз формировать новый список из необходимых и на getCount() возвращать его size().

Например вот так (в адаптере):

ArrayList<MyList> listShown;
void createListForShow(ArrayList<MyList> listAll){
    listShown = new ArrayList<MyList>();
    for (int i=0;i<listAll.size();i++)
        if (listAll.get(i).isShown) listShown.add(listAll.get(i));
    notifyDataSetChanged();
}
@Override
public int getItemCount() {            
    return listShown.size();
}
Answer 2

Не уверен поможет ли вам это решение, но есть интересный метод:

P.S - прошу прощения, но код на kotlin, уже даже забыл как эти методы на java выглядят =)) но думаю разница не особо сильная.

override fun getItemViewType(position: Int): Int {
    val item = mItems.get(position);
    if (item.visible == true) {
       return 1
    }
    return 0
}

А в методе onCreateViewHolder делаем так:

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): BaseVH? {
    val inflater: LayoutInflater = LayoutInflater.from(mContext)
    if (viewType == 1) {
        return CustomVH(inflater.inflate(R.layout.your_layout_here, parent, false))
    }
    return null
}

в onBindViewHolder нужно holder на нуль проверять, если не нуль то заполнять данными.

С null не проверял, но если будет ругаться на то что нельзя null holder возвращать, то можно просто пустой holder возвращать с 0 высотой view. Недавно копался с LayoutManagerom и разные способы пробовал и точно знаю что с 0 высотой места не занимает, или View.GONE как вариант.

А вообще метод onBindViewHolder нужен для заполнения данными, а в него уже переход после onCreateViewHolder, тоесть вы как бы макет уже загрузили, но просто он пустой и поэтому занимает место.

READ ALSO
Субтитры JavaFX

Субтитры JavaFX

Делаю проект по javaFXПодскажите, пожалуйста, как сделать привязку субтитров ко времени на видео?

144
Libgdx Объект timer срабатывает сразу

Libgdx Объект timer срабатывает сразу

В приложении есть два таймераПервый после старта работает нормально, щелкает раз в секунду, отрабатывает игровую логику

118
Exception java - почему

Exception java - почему

Есть код:

127
Вывод данных ИЗ TableView.Java

Вывод данных ИЗ TableView.Java

Как после редактирования данных пользоватилем таблицы TabbleView по нажатию на кнопку Save считать данные из таблицы TableView

158