0

Пытаюсь реализовать RecyclerView. Контейнер внутри ConstraintLayout

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/pushDataContainer"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/inWorkTextView">

</androidx.recyclerview.widget.RecyclerView>

разметка для карточки

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/cv_not_in_work"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="4dp">
  <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/rectangleNumber"
            android:layout_width="60dp"
            android:layout_height="28dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/rectangle"
            android:gravity="center_vertical|center_horizontal"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/dateTimeView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/montserrat"
            app:layout_constraintStart_toStartOf="@+id/rectangleNumber"
            app:layout_constraintTop_toBottomOf="@+id/rectangleNumber" />

        <TextView
            android:id="@+id/address"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/poppins_medium"
            app:layout_constraintStart_toStartOf="@+id/dateTimeView"
            app:layout_constraintTop_toBottomOf="@+id/dateTimeView" />

        <TextView
            android:id="@+id/cvalView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/poppins_medium"
            app:layout_constraintStart_toStartOf="@+id/address"
            app:layout_constraintTop_toBottomOf="@+id/address" />

        <TextView
            android:id="@+id/taskView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/poppins_medium"
            app:layout_constraintStart_toStartOf="@+id/cvalView"
            app:layout_constraintTop_toBottomOf="@+id/cvalView" />

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/montserrat"
            app:layout_constraintStart_toStartOf="@+id/taskView"
            app:layout_constraintTop_toBottomOf="@+id/taskView" />

        <Button
            android:id="@+id/agreeBtn"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:background="@drawable/rectangle"
            android:backgroundTint="#00CC4F"
            android:fontFamily="@font/montserrat"
            android:text="Принять"
            android:textColor="#FFFFFF"
            app:layout_constraintStart_toStartOf="@+id/description"
            app:layout_constraintTop_toBottomOf="@+id/description" />

        <Button
            android:id="@+id/disagreeBtn"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"
            android:backgroundTint="#F23B51"
            android:text="Отклонить"
            android:onClick="agreeBtn"
            android:textColor="#FFFFFF"
            android:fontFamily="@font/montserrat"
            android:background="@drawable/rectangle"
            app:layout_constraintLeft_toRightOf="@+id/agreeBtn"
            app:layout_constraintTop_toTopOf="@+id/agreeBtn" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

класс viewholder

public class RecyclerViewHolders extends RecyclerView.ViewHolder {
    TextView number;
    TextView dateTime;
    TextView address;
    TextView cval;
    TextView task;
    TextView description;
    Button disagree;

    public RecyclerViewHolders(@NonNull View itemView) {
        super(itemView);
        number = itemView.findViewById(R.id.rectangleNumber);
        dateTime = itemView.findViewById(R.id.dateTimeView);
        address = itemView.findViewById(R.id.address);
        cval = itemView.findViewById(R.id.cvalView);
        task = itemView.findViewById(R.id.taskView);
        description = itemView.findViewById(R.id.description);
        disagree = itemView.findViewById(R.id.disagreeBtn);
    }
}

адаптер

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
    Context context;
    List<PushData> list;

    public RecyclerViewAdapter(Context context, List<PushData> list) {
        this.list = list;
        this.context = context;
    }

    public void setList(List<PushData> list) {
        this.list = list;
    }

    @NonNull
    @Override
    public RecyclerViewHolders onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_not_in_work, null);
        RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewHolders holder, int position) {
        holder.description.setText(list.get(position).task);
        holder.address.setText(list.get(position).address);
        holder.dateTime.setText(list.get(position).date);
        holder.cval.setText(list.get(position).cval);
        holder.number.setText(list.get(position).number);
        holder.task.setText(list.get(position).task);
        if(list.get(position).type.equalsIgnoreCase("autoselect"))
            holder.disagree.setVisibility(View.INVISIBLE);
        else
            holder.disagree.setVisibility(View.VISIBLE);
    }

    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }
}

в onCreate инициализирую. Может дело в том, что использую LinearLayoutManager, а layout - Constraint?

RecyclerView rv = findViewById(R.id.pushDataContainer);

LinearLayoutManager llm = new LinearLayoutManager(this);
rv.setLayoutManager(llm);

rva = new RecyclerViewAdapter(getApplicationContext(), pushDataList);
rv.setAdapter(rva);

затем по нажатию на кнопку идет запрос к бд и возвращается список с данными

rva.setList(pushData);
rva.notifyDataSetChanged();

результат на картинке. кнопки при этом не кликабельны и список не прокручивается.

скрин экрана

  • Нет прокрутки скорее всего потому что RecyclerView выходит за пределы экрана. Он у вас привязан к низу контейнера, но как настроен и расположен сам контейнер мы не видим - возможно ему задана высота wrap_content. Насчёт кнопок неясно как вы определяете их кликабельность, если им не назначены слушатели. Если имеется в виду визуальное подсвечивание - то может быть у них на фоне просто картинки или шейпы, а не селекторы, или селекторы неправильно оформлены. – woesss Feb 15 '20 at 20:49
  • высота контейнера android:layout_height="match_parent" функции для кнопок заданы в android:onClick – Anton Charov Feb 15 '20 at 20:58
  • Собственно до этого я делал без RecyclerVew через ScrollView и все работало. – Anton Charov Feb 15 '20 at 21:09
  • вы пишите, что функции для кнопок заданы в android:onClick, но ничего такого нет в разметке вашего айтема, кроме того данный способ работает только в активити, не на фрагментах.В вопросе недостаточно сведений о проблеме, вы пишите, что не реагирует на клик, но нигде в коде нет никаких попыток этот клик получить и обработать, он должен святым андроидом реализоваться как то ? linearlayoutmanager не имеет никакого отношения к типу контейнера разметки вашего айтема, а значит это название то, что айтемы будут располагаться линейно (друг за другом) – pavlofff Feb 15 '20 at 23:55
  • Когда выкладывал разметку не было, потом добавил - ничего не поменялось. До этого делал просто в ScrollView находился LinearLayout в который динамически добавлялись фрагменты. То, что onClick для них не работает не знал. – Anton Charov Feb 16 '20 at 09:19

0 Answers0