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

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

activity_hourly_forecast. xml:

<?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/ConstraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    tools:context=".ui.HourlyForecastActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/hourlyListItems"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:listitem="@layout/hourly_list_item" />
</androidx.constraintlayout.widget.ConstraintLayout>

hourly_list_item. xml:

<?xml version="1.0" encoding="utf-8"?>
    <layout    xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
    <variable
        name="hour"
        type="com.example.stormy.model.Hour"/>
</data>
<RelativeLayout
    android:id="@+id/hourlyListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    tools:background="@color/colorAccent">

    <TextView
        android:id="@+id/timeLabel"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:text="@{String.valueOf(hour.time)}"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        tools:text="12 PM"/>

    <ImageView
        android:id="@+id/iconImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/timeLabel"
        android:layout_toEndOf="@+id/timeLabel"
        app:srcCompat="@drawable/partly_cloudy"/>

    <TextView
        android:id="@+id/temperatureLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_alignParentTop="false"
        android:layout_alignParentRight="true"
        android:text="@{String.valueOf(hour.temperature)}"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        tools:text="100"/>

    <TextView
        android:id="@+id/summaryLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/iconImageView"
        android:layout_toEndOf="@+id/iconImageView"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:text="@{String.valueOf(hour.summary)}"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        tools:text="Partly cloudy"/>
</RelativeLayout>

HourlyAdapter. java:

    package com.example.stormy.adapters;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.ViewGroup;

    import androidx.annotation.NonNull;
    import androidx.databinding.DataBindingUtil;
    import androidx.recyclerview.widget.RecyclerView;

    import com.example.stormy.R;
    import com.example.stormy.databinding.HourlyListItemBinding;
    import com.example.stormy.model.Hour;

    import java.util.List;

    //manage the views from the hourly_list_item layout
    public class HourlyAdapter extends                   
RecyclerView.Adapter<HourlyAdapter.ViewHolder>{`

    private List<Hour> hours;
    Context context;

    public HourlyAdapter(List<Hour> hours, Context context) {
        this.hours = hours;
        this.context = context;
    }

    @NonNull
    @Override
    public HourlyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        HourlyListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.
                from(parent.getContext()),
                R.layout.hourly_list_item,parent,
                false);
        return new ViewHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Hour hour = hours.get(position);
        holder.hourlyListItemBinding.setHour(hour);

    }

    @Override
    public int getItemCount() {
        return hours.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        //binding variables
        //constructer to do view lookups for each subview
        public HourlyListItemBinding hourlyListItemBinding;
        public ViewHolder(HourlyListItemBinding hourlyLayoutBinding){
            super(hourlyLayoutBinding.getRoot());
            hourlyListItemBinding = hourlyLayoutBinding;
        }
    }
}

HourlyForecastActivity. java

package com.example.stormy.ui;

import android.os.Bundle;

import com.example.stormy.R;
import com.example.stormy.adapters.HourlyAdapter;
import com.example.stormy.databinding.ActivityHourlyForecastBinding;
import com.example.stormy.model.Hour;
import    com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;

import android.view.View;

import java.util.ArrayList;
import java.util.List;

public class HourlyForecastActivity extends AppCompatActivity {
private HourlyAdapter adapter;
private ActivityHourlyForecastBinding binding;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    binding =    DataBindingUtil.setContentView(this,R.layout.activity_hourly_forecast);
    binding.hourlyListItems.setLayoutManager(new    LinearLayoutManager(this));
    adapter = new HourlyAdapter(getHourData(),this);
    binding.hourlyListItems.setAdapter(adapter);

}

private List<Hour> getHourData() {
    List<Hour> hours = new ArrayList<>();
    Hour hour = new Hour(1526508000, "Mostly Cloudy", 57.29, "partly-cloudy-day", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526511600, "Clear", 57.29, "clear-night", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526515200, "Clear", 57.29, "clear-day", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526518800, "Windy", 57.29, "wind", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526522400, "Snowy", 57.29, "snow", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526526000, "Raining", 57.29, "rain", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526529600, "Foggy", 57.29, "fog", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526533200, "Mostly Cloudy", 57.29, "partly-cloudy-night", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526536800, "Sleet", 57.29, "sleet", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526540400, "Cloudy", 57.29, "cloudy", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(152654400, "Mostly Cloudy", 57.29, "partly-cloudy-day", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526547600, "Partly Cloudy", 57.29, "partly-cloudy-night", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526551200, "Partly Cloudy", 57.29, "partly-cloudy-night", "America/Los_Angeles");
    hours.add(hour);
    hour = new Hour(1526554800, "Partly Cloudy", 57.29, "partly-cloudy-night", "America/Los_Angeles");
    hours.add(hour);
    return hours;
}

}

Там есть фиктивные данные в макете, и я устанавливаю данные статически, но позже я буду использовать API для динамической установки данных в зависимости от местоположения. Спасибо за помощь!

1 Ответ

0 голосов
/ 06 мая 2020

В макете элемента списка у вас есть белый цвет текста, а также белый фон RecyclerView. Из-за этого текст не будет виден, и вы получите пустой экран.

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