استدعاء طريقة محول RecyclerView داخل الجزء

-1

لقد قمت مؤخرًا بنقل الكود الخاص بي من نشاط إلى جزء ، ولكن تلقيت هذا الخطأ أثناء محاولة استدعاء الطريقة العامة "attachDatabaseReadListener ()" لمحول عرض المعاد تدويره داخل الجزء:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.digicube.RecyclerViewAdapter.attachDatabaseReadListener()' on a null object reference

قبل الانتقال إلى الجزء ، تمكنت من استدعاء الأساليب العامة للمحول عن طريق تسميته مثل adapter.publicMethod() ومع ذلك فإنه لا يعمل في جزء الآن.

إليك رمز محول RecyclerView الخاص بي:

import ...

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    ...

    public RecyclerViewAdapter(Callback callback, Context context) {
        mCallback = callback;
        this.mContext = context;

        // ArrayList to hold task objects from Firebase database for recyclerViewAdapter
        mBrands = new ArrayList<>();

        // Initialize Firebase Components
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        mBrandsDatabaseReference = mFirebaseDatabase.getReference().child("brands");
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.brand_layout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        final TaskStructure taskStructure = mBrands.get(position);
        holder.mBrandNameTextView.setText(taskStructure.getBrandName());
        holder.mCategoryTextView.setText(taskStructure.getCategory());
        holder.mAvgUserRatingTextView.setText(String.valueOf(taskStructure.getAvgUserRating()));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ...
            }
        });
    }

    @Override
    public int getItemCount() {
        Collections.sort(mBrands, TaskStructure.AverageUserRatingComparator);
        return mBrands.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView mBrandNameTextView;
        private TextView mCategoryTextView;
        private TextView mAvgUserRatingTextView;
        private ImageView mBrandImageView;

        public ViewHolder(final View itemView) {
            super(itemView);
            mBrandNameTextView = itemView.findViewById(R.id.brand_name);
            mCategoryTextView = itemView.findViewById(R.id.category);
            mAvgUserRatingTextView = itemView.findViewById(R.id.avg_user_rating);
            mBrandImageView = itemView.findViewById(R.id.brand_image);
        }
    }

    public void attachDatabaseReadListener() {
        if (mChildEventListener == null) {
            mChildEventListener = new ChildEventListener() {
               ...
            };
            mBrandsDatabaseReference.addChildEventListener(mChildEventListener);
        }
    }

}

وأنا أبدأ على طريقة onViewCreated للتجزئة:

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        recyclerViewBrands = view.findViewById(R.id.recycler_view_brands);
        recyclerViewBrands.setLayoutManager(new LinearLayoutManager(this.getActivity()));

        brandsAdapter = new com.example.digicube.RecyclerViewAdapter(this, getActivity());
        recyclerViewBrands.setAdapter(brandsAdapter);
    }

    // Method call by activity on signed in
    public void attachListener(){
        brandsAdapter.attachDatabaseReadListener();
    }

1 إجابة

0

حصلت عليه يعمل عن طريق الاتصال attachDatabaseReadListener() طريقة في نهاية طريقة onViewCreated () في جزء. سابقا كنت أسميها على الطريقة العامة attachListener() الذي كان يتم تنفيذه بواسطة النشاط قبل onViewCreated () ، مما تسبب في الخطأ!

شكرًا لمايك م على تعليقك الذي ساعدني على فهم المشكلة.

:مؤلف
فوق
قائمة طعام