Как заполнить другой объект теми же полями или свойствами в том же recyclerview в android
Я собираюсь разработать приложение для футбола и после ответа json. (ссылка)
У меня есть два разных класса с разными именами, но с одинаковыми свойствами или полями и вы хотите отобразить один и тот же сингл RecyclerView
.
Здесь у меня есть мир и мир, имеющие те же поля, что и matchTime
, startTime
и endTime
. Я создал класс pojo, используя плагин jsontopojo.
Вот основные вещи, я хочу отобразить worldmatch в позиции 0 и остальную часть мира позиции на основе клуба. Вы можете увидеть более подробную информацию на картинке.
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Это должна быть первая вкладка (мир) и аналогично другой вкладке, например Европа, Азия с соответствующим аналогичным шаблоном.
Tab1 (Мир)
---------------position 0 (All match)------------------
|
| 930 1100 1130 and so on ( horizontal recyclerview)
|
-------------------------------------------
---------------position 1(Barcelona)------------------
|
| 1130 1230 1330 1430 and so on ( horizontal recyclerview)
|
-------------------------------------------
---------------position 2(Chelsea)------------------
|
| 1300 1400 1500 and so on ( horizontal recyclerview)
|
-------------------------------------------
.
.
.
so on
(vertical recyclerview)
Подробное описание изображения:
![введите описание изображения здесь]()
У меня есть два адаптера Recycliewiew, первый из которых отображает название клуба и передает соответствующие данные другому виду ресайклеров, которые будут отображать горизонтальный вид с временным matchTime.
Засекретировало положение Outer Recyclerview 0, worldmatch и отражает все остальные, как передать заполненные и worldmatch и мир данные в том же режиме и как отфильтровать всю вкладку.
Отобразите поле matchTime только из списка WorldMatch в позиции 0 и World в списке ниже 0. (горизонтальный recyclerview)
У любого есть какая-то идея, которая действительно полезна для меня и высоко ценит любую идею этого.
Спасибо заранее.
Ответы
Ответ 1
Это возможно. Теперь вы можете установить значение для другого класса во время разбора ответа или установить время адаптера. Я тоже так делал.
Например:
setmatches(List<club.wordlWild> ww){
List<WorldWild> list = new ArrayList<>();
for(club.worlWide cw : ww){
WorldWild w = new WorldWild ();
w.setMatchTime(cw.getMatchtimie);
..
...// set values
list.add(w);
}
}
Теперь вы можете добавить значения club.worlWide в WorldWild.
Если вы хотите, чтобы изменения делали наоборот.
Ответ 2
У вас может быть worldMatch
как заголовок вашего вертикального RecyclerView
. Вам действительно не нужны два разных адаптера для вашего RecyclerView
в вашем случае. Просто добавьте заголовок в RecyclerView
с классом worldMatch
.
Если вы хотите взглянуть на то, как вы собираетесь добавлять верхний или нижний колонтитул в RecyclerView
, вы можете взять здесь ответ.
Как только вы закончите с добавлением worldMatch
в качестве заголовка вашего вертикального RecyclerView
, вы будете передавать данные world
в адаптере вашего RecyclerView
и показывать их соответствующим образом.
Сообщите мне, есть ли у вас какие-либо недоумения.
Ответ 3
Я рекомендую вам создать класс TabData, который вы будете использовать для каждой вкладки.
public class TabData {
private List<TimeData> regionTimes;
private List<Pair<String, List<TimeData>>> clubTimes = new ArrayList<>();
public void setRegionTimes(List<TimeData> list) {
this.regionTimes = list;
}
public void putClubTimes(String clubName, List<TimeData> times) {
clubTimes.add(new Pair<>(clubName, times);
}
// Getters
}
Это будет класс TimeData.
public class TimeData {
int matchTime;
String startTime;
String endTime;
}
Затем, например, чтобы отобразить первую вкладку (вкладка "Мир" ), вы должны сделать следующее:
TabData worldTabData = new TabData();
worldTabData.setRegionTimes(jsonData.getSoccer().getWorldMatch());
for (ClubData clubData : jsonData.getSoccer().getClubs()) {
String clubName = clubData.getClubProfile().getClubName();
List<TimeData> times = clubData.getWorld();
worldTabData.putClubTimes(clubName, times);
}
regionAdapter = new RegionAdapter(worldTabData);
И это будет адаптер внешнего RecyclerView (вертикальный):
public class RegionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private TabData data;
public RegionAdapter(TabData data) {
this.data = data;
}
public int getItemCount() {
return 1 + data.getClubTimes().size(); // One row per club plus another one for position 0
}
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 0) {
// Set adapter for horizontal recyclerview with data.getRegionTimes()
} else {
Pair<String, List<TimeData>> clubTime = data.getClubTimes(position - 1);
// Set textview with club.first
// Set adapter for horizontal recyclerview with clubTime.second
}
}
}
Надеюсь, ты получишь идею!
Сообщите мне.
Спасибо.
Ответ 4
Я сделал что-то подобное с помощью родительского класса для использования в адаптере, но в вашем случае можно было бы иметь только один класс для каждого соответствия.