Stack Overflow на русском Asked by GRAND on December 10, 2020
Здрaвcтвуйте! Подскажите пожалуйста, как мне сгруппировать recyclerview? Цифры слева на фото -это семестры. Хочу сгруппировать по семестрам.
JSONArray array = new JSONArray(response);
if (array.length()!=0) {
for (int i = 0; i < array.length(); i++) {
JSONObject raspObject = array.getJSONObject(i);
MarksStudent marksStudent = new MarksStudent();
marksStudent.setMarksemestr(raspObject.getString("semectr"));
marksStudent.setMarkpredmet(raspObject.getString("predmet"));
marksStudent.setMarktype(raspObject.getString("typeexam"));
marksStudent.setOcenka(raspObject.getString("ocenka"));
arrayList.add(marksStudent);
}
marksAdapter = new MarksAdapter(getContext(), arrayList);
recyclerView.setAdapter(marksAdapter);
}
Группировка я так понимаю требуется визуальная. Для этих целей вам нужно в разметке добавить какое-то view определенного размера или сетить к элементу списка марджин сверху/снизу программно чтобы как-то отделить один семестр от другого. Вообще по логике, в вашем вопросе не хватает кода адаптера списка который занимается выводом данных. А именно метода занимающегося заполнением элемента данными:
@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
...
}
В конструктор помимо всякого-разного вы передаете массив состоящий из объектов класса MarksStudent
. У этого класса (который вы опять таки не приводите) есть поле что-то типа marksSemestr
которое хранит значение семестра которое в вышеуказанном методе вам нужно проверять и либо как уже говорилось раннее сетить марджин либо делать видимым какой-то view. Получаем элемент для отображения:
MarksStudent marksStudent = this.arrayList.get(position)
дальше проверяем если предыдущий элемент массива если он есть имеет поле семестра меньше чем у текущего то делаем видимой часть отвечающую за отступ:
if(position != 0 && marksStudent.getMarksemestr() > this.arrayList.get(position-1).getMarksemestr()){
holder.divider.setVisibility(View.VISIBLE);
}else{
holder.divider.setVisibility(View.GONE);
}
другой вариант - увеличение отступа программно:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0,20,0,0); // left, top, right, bottom
holder.itemView.setLayoutParams(params);
Стоит учитывать что здесь params.setMargins(0,20,0,0);
сетятся новые марджины для элемента списка и есть вероятность что ваши установленные отступы могут слететь. Поэтому я думаю вместо 0 имеет смысл установить ваши отступы если они есть.
Correct answer by Andrew on December 10, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP