简体   繁体   中英

Android Java - Variable 'adapter' might not have been initialised

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM