Как заполнить другой объект одинаковыми полями или свойствами в одном и том же recyclerview в Android

Я собираюсь разработать футбольное приложение, и у меня есть следующий ответ json. а>)

У меня есть два разных класса с разными именами, но с одинаковыми свойствами или полями, и я хочу отображать один и тот же единственный RecyclerView.

Здесь у меня есть worldmatch и world с такими же полями, как matchTime, startTime и endTime. Я создал класс pojo с помощью плагина jsontopojo.

Вот основные вещи, я хочу отображать worldmatch в позиции 0, а в остальном мире других позиций на основе клуба. Более подробно вы можете увидеть на картинке.

введите описание изображения здесь

введите описание изображения здесь

Это должна быть первая вкладка (мир) и аналогично другим вкладкам, таким как Европа , Азия с соответствующим аналогичным шаблоном.

Вкладка 1(Мир)

---------------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)

Подробное объяснение изображения:

введите описание изображения здесь

У меня есть два адаптера Recyclerview, первый из которых отображает clubname и передает соответствующие данные другому представлению recycler, которое будет отображать горизонтальное представление с соответствующим matchTime.

Заполнена позиция Outer Recyclerview 0, данные worldmatch, и она отражает все остальные, как мне передать заполненные данные worldmatch и world в одном и том же recyclerview и как отфильтровать все вкладки.

Отображать поле matchTime только из списка WorldMatch в позиции 0 и списка World ниже 0. (горизонтальный просмотр повторного использования)

У любого есть идея, которая действительно полезна для меня, и высоко ценю любую идею, стоящую за этим. Заранее спасибо.


person Horrorgoogle    schedule 15.02.2018    source источник
comment
массивы внутри soccer являются статическими??   -  person Santanu Sur    schedule 15.02.2018
comment
Нет, это динамично.   -  person Horrorgoogle    schedule 15.02.2018
comment
это довольно сложно..данные json могли бы быть сформированы лучше..   -  person Santanu Sur    schedule 15.02.2018
comment
да, но, к сожалению, это окончательный ответ.   -  person Horrorgoogle    schedule 15.02.2018
comment
Я просто знаю, как отображать в recyclerview два разных списка, таких как список мира и список мира, у которых есть общие свойства времени совпадения.   -  person Horrorgoogle    schedule 15.02.2018
comment
Итак, у вас есть 3 вкладки сверху. В зависимости от выбранной вкладки вы измените первый элемент вертикального вида recyclerview? Итак, если выбрана Азия, первый элемент вертикального просмотра повторного использования покажет горизонтальное представление повторного использования элементов, соответствующих Азии?   -  person denvercoder9    schedule 19.02.2018


Ответы (4)


Возможно. Теперь вы можете установить значение для другого класса во время разбора ответа или установки времени адаптера. Я также сделал это. Например:

   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. Хочешь перемен - делай наоборот.

person Muthu    schedule 19.02.2018
comment
Спасибо, но все еще не понимаю вас. - person Horrorgoogle; 19.02.2018

Вы можете использовать worldMatch в качестве заголовка вертикального RecyclerView. Вам действительно не нужны два разных адаптера для вашего RecyclerView в вашем случае. Достаточно просто добавить заголовок в свой RecyclerView с классом worldMatch.

Если вы хотите посмотреть, как вы будете добавлять верхний или нижний колонтитул в свой RecyclerView, вы можете взглянуть на ответ здесь.

Как только вы закончите с добавлением worldMatch в качестве заголовка вашего вертикального RecyclerView, вы будете передавать данные world в адаптер вашего RecyclerView и отображать их соответствующим образом.

Дайте мне знать, если у вас возникнут какие-либо недоразумения.

person Reaz Murshed    schedule 21.02.2018

Я рекомендую вам создать класс 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
        }
    }
}

Надеюсь, вы поняли идею!

Дайте мне знать.

Спасибо.

person fernandospr    schedule 20.02.2018

Я сделал что-то подобное через родительский класс для использования в адаптере, но в вашем случае может быть возможно просто иметь один и тот же класс для каждого совпадения.

person Lance Toth    schedule 23.02.2018