Android Studio RecyclerView не будет отображать мои данные при добавлении панели инструментов в мой файл `layout.xml` - PullRequest
1 голос
/ 25 февраля 2020

Я создал страницу, на которой будут отображаться данные о базе данных в RecyclerView. Это работает, но я решил поместить панель инструментов вверху страницы, чтобы иметь функцию возврата. После того, как я поместил панель инструментов в свой файл макета, RecyclerView больше не отображает никаких данных. Я думаю, что мой файл XML неверен. Заранее спасибо за помощь.

Файл Actity

package com.example.attendanceappvqyfyp;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;

import com.example.attendanceappvqyfyp.Interface.itemClickListener;
import com.example.attendanceappvqyfyp.Common.Common;
import com.example.attendanceappvqyfyp.Model.LecturerClass;
import com.example.attendanceappvqyfyp.Model.News;
import com.example.attendanceappvqyfyp.Model.Timetable;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.example.attendanceappvqyfyp.Common.Common;

public class LecturerClassList extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;

    FirebaseDatabase database;
    DatabaseReference lecturerclass;
    DatabaseReference news;

    FirebaseRecyclerAdapter<LecturerClass,LecturerClassViewHolder> adapter;

    TextView newscourse, newsclass;
    EditText newsdescription;
    Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lecturer_class_list);

        //Firebase
        database = FirebaseDatabase.getInstance();
        lecturerclass = database.getReference("Class");
        news = database.getReference("News");

        recyclerView = (RecyclerView)findViewById(R.id.recycler_lecturerclass);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        //Toolbar code
        toolbar = findViewById(R.id.toolbar);
        toolbar.setTitle("Class List");
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);

        loadLecturerClass(Common.currentLecturer.getName());
    }

    private void loadLecturerClass(String Lecturer) {
        adapter = new FirebaseRecyclerAdapter<LecturerClass, LecturerClassViewHolder>(LecturerClass.class, R.layout.lecturerclass_item, LecturerClassViewHolder.class, lecturerclass.orderByChild("lecturer").equalTo(Lecturer)) {
            @Override
            protected void populateViewHolder(LecturerClassViewHolder lecturerClassViewHolder, LecturerClass lecturerClass, int i) {
                lecturerClassViewHolder.lclasstitle.setText("Class :" + adapter.getRef(i).getKey());
                lecturerClassViewHolder.ldate.setText("Day :" + lecturerClass.getDay());
                lecturerClassViewHolder.ltime.setText("Time :" + lecturerClass.getTime());
                lecturerClassViewHolder.lclassroom.setText("Classroom :" + lecturerClass.getClassroom());
                lecturerClassViewHolder.lcourse.setText(lecturerClass.getCourse());

                lecturerClassViewHolder.setItemClickListener(new itemClickListener() {
                    @Override
                    public void onClick(View view, int position, boolean isLongClick) {
                        //code later
                    }
                });
            }
        };
        recyclerView.setAdapter(adapter);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        if(item.getTitle().equals(Common.News))
        {
            showNewsDialog(adapter.getRef(item.getOrder()).getKey(),adapter.getItem(item.getOrder()));
        }
        return super.onContextItemSelected(item);
    }

    private void showNewsDialog(final String course, final LecturerClass item) {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(LecturerClassList.this);
        alertDialog.setTitle("Make Announcement");
        alertDialog.setMessage("Make announcement about this class.");

        LayoutInflater inflater = this.getLayoutInflater();
        View lecturer_make_news = inflater.inflate(R.layout.activity_lecturer_make_news, null);

        newscourse = lecturer_make_news.findViewById(R.id.NewsCourse);
        newsclass = lecturer_make_news.findViewById(R.id.NewsClass);
        newsdescription = lecturer_make_news.findViewById(R.id.NewsDescription);

        newscourse.setText("Course: "+item.getCourse());
        newsclass.setText("Subject: " + course);

        alertDialog.setView(lecturer_make_news);

        alertDialog.setPositiveButton("Post", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                if(newsdescription.getText().toString().isEmpty()){
                    Toast.makeText(LecturerClassList.this, "Post cancel, description cannot be empty.", Toast.LENGTH_SHORT).show();
                }
                else {
                    News lnews = new News(
                            item.getCourse(),
                            course,
                            newsdescription.getText().toString()
                    );

                    news.child(String.valueOf(System.currentTimeMillis())).setValue(lnews);
                    Toast.makeText(LecturerClassList.this, "Announcement post successfully.", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }
        });

        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();;
            }
        });
        alertDialog.show();
    }
}

Файл активности для держателя просмотра

package com.example.attendanceappvqyfyp;

import android.view.ContextMenu;
import android.view.View;
import android.widget.TextView;

import com.example.attendanceappvqyfyp.Common.Common;
import androidx.recyclerview.widget.RecyclerView;
import com.example.attendanceappvqyfyp.Interface.itemClickListener;

public class LecturerClassViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnCreateContextMenuListener {

    public TextView lclasstitle, ldate, ltime, lclassroom, lcourse;

    private itemClickListener itemClickListener;

    public LecturerClassViewHolder(View itemView) {
        super(itemView);

        lclasstitle = (TextView)itemView.findViewById(R.id.lclasstitle);
        ldate = (TextView)itemView.findViewById(R.id.ldate);
        ltime = (TextView)itemView.findViewById(R.id.ltime);
        lclassroom = (TextView)itemView.findViewById(R.id.lclassroom);
        lcourse = (TextView)itemView.findViewById(R.id.lcourse);

        itemView.setOnCreateContextMenuListener(this);
        itemView.setOnClickListener(this);

    }

    public void setItemClickListener(itemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    @Override
    public void onClick(View view) {
        itemClickListener.onClick(view, getAdapterPosition(), false);
    }


    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select");

        menu.add(0,0,getAdapterPosition(), Common.News);
    }

}

Файл макета для повторного просмотра

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".LecturerClassList">

    <android.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:theme="@style/ThemeOverlay.AppCompat.Dark" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_lecturerclass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        app:layout_constraintTop_toBottomOf="@+id/toolbar" />

</androidx.constraintlayout.widget.ConstraintLayout>

Файл макета для просмотра элемента

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="160dp"
    app:cardElevation="4dp"
    android:layout_marginBottom="8dp"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/lclasstitle"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:text=""
            android:textColor="@android:color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/ldate"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignBottom="@id/lclasstitle"
            android:layout_marginBottom="-40dp"
            android:gravity="center"
            android:text=""
            android:textColor="@android:color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/ltime"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignBottom="@id/ldate"
            android:layout_marginBottom="-40dp"
            android:gravity="center"
            android:text=""
            android:textColor="@android:color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/lclassroom"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:text=""
            android:textColor="@android:color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/lcourse"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:text=""
            android:visibility="invisible"
            android:textColor="@android:color/black"
            android:textSize="20sp" />

    </RelativeLayout>

</androidx.cardview.widget.CardView>

Спасибо ZeePee за предоставленную ссылку Отображать стрелку назад на панели инструментов , хотя панель инструментов у меня не сработала, я изменил ее обратно на панель действий и использую код из ссылки, и она работает.

1 Ответ

0 голосов
/ 25 февраля 2020

Попробуйте добавить горизонтальные ограничения для панели инструментов и вида Recycler. После этого вам нужно указать, где вы хотите, чтобы ваши виджеты одного элемента в Относительном макете

...