When a user logs in to my app, they can either click the view students
button or daily grading
button. The view students
will display a student’s image and their name. The daily grading
will display the student’s image, name, and two checkboxes that says pass or fail. Now the issue I have is that the checkboxes for pass and fail are showing up in my activity_view_students.xml
view when it should not be. It should only show when a user clicks daily grading
. I will put images below to make it clearer
What it looks like in the activity_view_students.xml
What it should look like in activity_view_students.xml
I will paste all relevant code below.
ViewStudents.java
package com.example.studenttracker; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.Query; import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class ViewStudents extends AppCompatActivity { RecyclerView recyclerView; Button addStudent; private DatabaseReference myRef; public ArrayList<Students> students; private RecyclerAdapter recyclerAdapter; private Button orderStudents; private EditText mEditTextAge; private EditText mEditTextAssignment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_students); recyclerView = findViewById(R.id.recyclerView); addStudent = findViewById(R.id.addStudentButton); mEditTextAge = findViewById(R.id.EditTextAge); mEditTextAssignment = findViewById(R.id.EditTextAssignment); orderStudents = findViewById(R.id.orderStudents); addStudent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(ViewStudents.this, AddStudent.class)); } }); recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); recyclerView.setHasFixedSize(true); myRef = FirebaseDatabase.getInstance().getReference(); students = new ArrayList<>(); ClearAll(); GetDataFromFirebase(); } private void GetDataFromFirebase() { Query query = myRef.child("student"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { ClearAll(); for(DataSnapshot snapshot: dataSnapshot.getChildren()) { Students student = new Students(); if (snapshot.child("url").getValue() == null) { student.setImageUrl(snapshot.child("imageUrl").getValue().toString()); } else { student.setImageUrl(snapshot.child("url").getValue().toString()); } // student.setAge(mEditTextAge.getText().toString()); // student.setAssignment(mEditTextAssignment.getText().toString().trim()); student.setName(snapshot.child("name").getValue().toString()); students.add(student); } recyclerAdapter = new RecyclerAdapter(getApplicationContext(), students); recyclerView.setAdapter(recyclerAdapter); recyclerAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } private void ClearAll() { if (students != null) { students.clear(); if(recyclerAdapter != null) { recyclerAdapter.notifyDataSetChanged(); } } students = new ArrayList<>(); } public void orderStudents(View view) { Collections.sort( students, new Comparator<Students>() { @Override public int compare( Students o1, Students o2 ) { return o1.name.compareTo( o2.name ); } }); recyclerAdapter.notifyDataSetChanged(); } }
RecyclerAdapter.java
package com.example.studenttracker; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import java.util.ArrayList; public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { private OnItemClickListener mListener; public interface OnItemClickListener { void onItemClick(int position); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } private static final String Tag = "RecyclerView"; private Context mContext; private ArrayList<Students> studentsArrayList; public RecyclerAdapter(Context mContext, ArrayList<Students> studentsArrayList) { this.mContext = mContext; this.studentsArrayList = studentsArrayList; } @NonNull @Override public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.activity_student_item,parent,false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { //TextView holder.textView.setText(studentsArrayList.get(position).getName()); Glide.with(mContext).load(studentsArrayList.get(position).getImageUrl()).into(holder.imageView); // if (studentsArrayList.get(position).get) { //check if you need the buttons or not // holder..setVisibility(View.VISIBLE); // holder.checkBox2.setVisibility(View.VISIBLE); // } else { // holder.checkBox.setVisibility(View.GONE); // holder.checkBox2.setVisibility(View.GONE); // } } @Override public int getItemCount() { return studentsArrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); imageView = itemView.findViewById(R.id.imageView); textView = itemView.findViewById(R.id.textView); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { int position = getAdapterPosition(); } } }); } } }
activity_view_students.xml
<?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=".ViewStudents"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="409dp" android:layout_height="729dp" android:layout_marginEnd="1dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" > </androidx.recyclerview.widget.RecyclerView> <Button android:id="@+id/addStudentButton" android:layout_width="wrap_content" android:layout_height="50dp" android:text="Add Students" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/orderStudents" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="orderStudents" android:text="Order Students" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
daily_grading.xml
<?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=".DailyGrading"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="409dp" android:layout_height="729dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_student_item.xml
<?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="wrap_content" tools:context=".DailyGrading"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:foreground="?android:attr/selectableItemBackground" app:cardElevation="2dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.cardview.widget.CardView> <RelativeLayout android:id="@+id/relativeLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="52dp"> <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="50dp" android:paddingTop="20dp" android:scaleType="centerCrop" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageView" android:layout_margin="10dp" android:textSize="16sp" /> <CheckBox android:id="@+id/passc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/textView" android:text="PASS" /> <CheckBox android:id="@+id/failc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/textView" android:layout_toRightOf="@+id/passc" android:text="FAIL" /> </RelativeLayout> </androidx.constraintlayout.widget.ConstraintLayout>
GradingRecyclerAdapter
package com.example.studenttracker; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import java.util.ArrayList; public class GradingRecyclerAdapter extends RecyclerView.Adapter<GradingRecyclerAdapter.ViewHolder> { private OnItemClickListener mListener; public interface OnItemClickListener { void onItemClick(int position); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } private static final String Tag = "RecyclerView"; private Context mContext; private ArrayList<Students> studentsArrayList; public GradingRecyclerAdapter(Context mContext, ArrayList<Students> studentsArrayList) { this.mContext = mContext; this.studentsArrayList = studentsArrayList; } @NonNull @Override public GradingRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.activity_grading_student_item,parent,false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { //TextView holder.textView.setText(studentsArrayList.get(position).getName()); Glide.with(mContext).load(studentsArrayList.get(position).getImageUrl()).into(holder.imageView); } @Override public int getItemCount() { return studentsArrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; Button passButton; Button failButton; public ViewHolder(@NonNull View itemView) { super(itemView); imageView = itemView.findViewById(R.id.imageView); textView = itemView.findViewById(R.id.textView); passButton = itemView.findViewById(R.id.PASS); failButton = itemView.findViewById(R.id.FAIL); // passButton.setVisibility(View.GONE); // failButton.setVisibility(View.GONE); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { int position = getAdapterPosition(); } } }); } } }
activity_grading_student_item
<?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="wrap_content" tools:context=".DailyGrading"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:foreground="?android:attr/selectableItemBackground" app:cardElevation="2dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.cardview.widget.CardView> <RelativeLayout android:id="@+id/relativeLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="52dp"> <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="50dp" android:paddingTop="20dp" android:scaleType="centerCrop" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageView" android:layout_margin="10dp" android:textSize="16sp" /> <CheckBox android:id="@+id/PASS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/textView" android:text="PASS" /> <CheckBox android:id="@+id/FAIL" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/textView" android:layout_toRightOf="@+id/PASS" android:text="FAIL" /> </RelativeLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Advertisement
Answer
You can simply use different adapters create another activity_student_item.xml let’s say activity_view_student_item.xml and remove the checkboxes from that one create another adapter for that recyclerView but change
View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.activity_student_item,parent,false);
in the new adapter to
View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.activity_view_student_item,parent,false);
and in the ViewStudents activity set the recycler’s Adapter to that new adapter