10

我要开发足球应用程序,并有以下json响应。(链接

我有两个具有不同名称但具有相同属性或字段的不同类,并且希望显示一个相同的单个RecyclerView.

在这里,我有 worldmatch 和 world 具有相同的字段,例如matchTime,startTimeendTime。我使用 jsontopojo 插件创建了 pojo 类。

这是主要的事情,我想根据俱乐部在位置 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)

详细说明图片查看:

在此处输入图像描述

我有两个 Recyclerview 适配器,第一个是显示clubname并将各自的数据传递给其他 recycler 视图,该视图将显示带有相应 matchTime的水平视图。

填充了外部 Recyclerview 位置 0,worldmatch数据,它反映了所有其他数据,我如何在同一个 recyclerview 中传递填充的worldmatch世界数据以及如何过滤掉所有选项卡。

仅在位置 0的WorldMatch列表和低于 0 的World列表中显示 matchTime 字段。 (水平回收视图)

任何人都有任何想法,这对我真的很有帮助,非常感谢这背后的任何想法。 提前致谢。

4

4 回答 4

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。如果你想改变,反之亦然。

于 2018-02-19T10:18:47.083 回答
4

您可以将worldMatch用作您的垂直的标题RecyclerView。在您的情况下,您实际上并不需要两个不同的适配器RecyclerViewRecyclerView只需在类中添加标题worldMatch就足够了。

如果你想看看你将如何在RecyclerView的.

一旦你完成添加worldMatch作为你的垂直的标题,RecyclerView你将在world你的适配器中传递数据RecyclerView并相应地显示它们。

如果您有任何困惑,请告诉我。

于 2018-02-21T20:01:28.123 回答
3

我通过在适配器中使用的父类做了类似的事情,但在你的情况下,每个匹配项可能只有相同的类。

于 2018-02-23T14:15:38.780 回答
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
        }
    }
}

希望你明白这一点!

让我知道。

谢谢。

于 2018-02-20T20:58:02.990 回答