Как создать список массивов, в котором один из параметров будет равен параметру из другого массива - PullRequest
0 голосов
/ 16 июня 2020

У меня вызов API с погодой. В ответ я получаю WeatherResponse, который содержит списки массивов суточной температуры, почасовой и минутной температуры. С другой стороны, у меня есть RecyclerView, который показывает весь день из дневного массива. Когда я нажимаю на RecyclerView в какой-то день, мне нужно развернуть выбранный элемент и показать все часы того же дня. Я создал представление, содержащее TextView (день из дня) и RecyclerView (часы), которое будет содержать часы дня, в который щелкнули. В моем адаптере Days rv я делаю интерфейс, который прослушивает щелчок по дню и внедряю его в основное действие. Интерфейс передает позицию дня клика и списка дневных массивов. Я создаю еще один адаптер для Hourly RV, который находится внутри daily RV. Итак, как я могу создать список часов из выбранного дня? *

public class Daily extends BaseObservable implements Parcelable {

    @SerializedName("dt")
    @Expose
    private int dt;
    @SerializedName("sunrise")
    @Expose
    private int sunrise;
    @SerializedName("sunset")
    @Expose
    private int sunset;
    @SerializedName("temp")
    @Expose
    private Temp temp;
    @SerializedName("feels_like")
    @Expose
    private FeelsLike feelsLike;
    @SerializedName("pressure")
    @Expose
    private int pressure;
    @SerializedName("humidity")
    @Expose
    private int humidity;
    @SerializedName("dew_point")
    @Expose
    private double dewPoint;
    @SerializedName("wind_speed")
    @Expose
    private double windSpeed;
    @SerializedName("wind_deg")
    @Expose
    private int windDeg;
    @SerializedName("weather")
    @Expose
    private List<Weather> weather = null;
    @SerializedName("clouds")
    @Expose
    private int clouds;
    @SerializedName("rain")
    @Expose
    private double rain;
    @SerializedName("uvi")
    @Expose
    private double uvi;
}

Функция привязки дневного адаптера:

@Override
    public void onBindViewHolder(@NonNull DayViewHolder holder, int position) {
        Daily daily = dailies.get(position);
        holder.dayItemViewBinding.setDaily(daily);
        holder.dayItemViewBinding.getRoot().setTag(position);

        holder.dayItemViewBinding.getRoot().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = (int) v.getTag();
                if (callback != null){
                    callback.onDayItemClick(position, daily);
                }
            }
        });

1 Ответ

0 голосов
/ 16 июня 2020

Я понял.

private void fillHoursRecyclerView(Daily daily) {
        selectedDay = new TimeUtils();
        hourToShow = new TimeUtils();
        selectedDay.getReadableDay(daily.getDt());
        ArrayList hourlies = new ArrayList<>();

        for (int i = 0; i < weatherResponseViewModel.getHourlyWeatherData().getValue().size(); i++) {
            if (hourToShow.getReadableDay(weatherResponseViewModel.getHourlyWeatherData().getValue().get(i).getDt()).equals(selectedDay.getReadableDay(daily.getDt()))) {
                hourlies.add(weatherResponseViewModel.getHourlyWeatherData().getValue().get(i));
            }
        }

        hoursRvAdapter = new HoursRvAdapter(getApplicationContext(), hourlies);
        hoursRecyclerView = findViewById(R.id.hoursRecyclerView);
        hoursRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        hoursRecyclerView.setItemAnimator(new DefaultItemAnimator());
        hoursRecyclerView.setAdapter(hoursRvAdapter);
        hoursRecyclerView.setVisibility(View.VISIBLE);
        hoursRvAdapter.notifyDataSetChanged();
    }

public class TimeUtils {

    private String readableDay;

    public String getReadableDay(int dt) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            readableDay = Instant.ofEpochSecond(dt)
                    .atZone(ZoneId.of("Asia/Jerusalem"))
                    .getDayOfWeek()
                    .getDisplayName(TextStyle.FULL, Locale.US);
        }
        return readableDay;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...