I'm developing an android app where the details from the Firebase Realtime Database will be shown in Recycler View. I want to make it like expandable recyclerview. But I'm getting a error when i tried to use my adapter.
Variable 'adapter' might not have been initialised
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Employee>()
.setQuery(mAttendanceDatabase, Employee.class)
.build();
final FirebaseRecyclerAdapter<Employee, EmployeeViewHolder> adapter = new FirebaseRecyclerAdapter<Employee, EmployeeViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final EmployeeViewHolder holder, final int position, @NonNull Employee model) {
String employee_Id = getRef(position).getKey();
assert employee_Id != null;
mAttendanceDatabase.child(employee_Id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String employee_Name = dataSnapshot.child("employeeName").getValue().toString();
holder.employeeName.setText(employee_Name);
holder.btn_viewMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.getItem(position); //I'm getting error here
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getContext(), "Some error occurred", Toast.LENGTH_SHORT).show();
}
});
}
@NonNull
@Override
public EmployeeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.employee_view_layout, parent, false);
EmployeeViewHolder viewHolder = new EmployeeViewHolder(view);
return viewHolder;
}
};
recyclerView.setAdapter(adapter);
adapter.startListening();
}
public static class EmployeeViewHolder extends RecyclerView.ViewHolder{
TextView employeeName;
ImageButton btn_viewMore;
public EmployeeViewHolder(@NonNull View itemView) {
super(itemView);
employeeName = itemView.findViewById(R.id.employeeName_evl);
btn_viewMore = itemView.findViewById(R.id.viewMoreBtn);
}
}
I can't find any proper solution. Help me with this.
try to put the adapter over this
in a variable:
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Employee>()
.setQuery(mAttendanceDatabase, Employee.class)
.build();
final FirebaseRecyclerAdapter<Employee, EmployeeViewHolder> adapter = new FirebaseRecyclerAdapter<Employee, EmployeeViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final EmployeeViewHolder holder, final int position, @NonNull Employee model) {
String employee_Id = getRef(position).getKey();
assert employee_Id != null;
final FirebaseRecyclerAdapter<Employee, EmployeeViewHolder> thisAdapter = this;
mAttendanceDatabase.child(employee_Id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String employee_Name = dataSnapshot.child("employeeName").getValue().toString();
holder.employeeName.setText(employee_Name);
holder.btn_viewMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
thisAdapter.getItem(position); //I'm getting error here
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getContext(), "Some error occurred", Toast.LENGTH_SHORT).show();
}
});
}
@NonNull
@Override
public EmployeeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.employee_view_layout, parent, false);
EmployeeViewHolder viewHolder = new EmployeeViewHolder(view);
return viewHolder;
}
};
recyclerView.setAdapter(adapter);
adapter.startListening();
}
Edit
To support my case I made a minimal Example:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.