Recycler List Adapter является нулевым после инициализации - PullRequest
0 голосов
/ 27 апреля 2018

Мое приложение имеет панель вкладок с тремя фрагментами. Во время метода onCreate я вызываю функцию с именем initPlantList. Эта функция инициализирует мой RecyclerListAdapter.

private void initPlantList(){
    RecyclerView rV = findViewById(R.id.plantsRecycler);
    PlantListAdapter pLA = new PlantListAdapter(this);
    Log.d("PLA", pLA.hasContext());
    rV.setAdapter(pLA);
    rV.setLayoutManager(new LinearLayoutManager(this));
}

Я получаю эту ошибку java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference, когда пытаюсь позвонить rV.setAdapter(pLA); Вот мой класс адаптера

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

    private static final String TAG = "PlantListAdapter";

    private Context mContext;

    public PlantListAdapter(Context c){
        this.mContext = c;
    }

    public String hasContext(){
        if(this.mContext != null){
            return mContext.getPackageResourcePath();
        }
        return "false";
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder: called.");

    holder.image.setImageDrawable(MyApplication.myPlantList.get(position).getImage());

holder.plantName.setText(MyApplication.myPlantList.get(position).getName());
    }

    @Override
    public int getItemCount() {
        return MyApplication.myPlantList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        CircleImageView image;
        TextView plantName;
        RelativeLayout plantListItem;

        public ViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.plantImage);
            plantName = itemView.findViewById(R.id.plantName);
            plantListItem = itemView.findViewById(R.id.plantListItem);
        }
    }
}

Любые мысли о том, почему он ссылается на pLA как null object reference?

1 Ответ

0 голосов
/ 27 апреля 2018

Это не ваш адаптер, который является нулевым. Это ваш Recyclerview. Вы используете фрагмент, поэтому вы не можете использовать (findViewById). Вы должны найти его, используя вид, который вы надули. Попробуйте это:

private void initPlantList(View v){
RecyclerView rV = v.findViewById(R.id.plantsRecycler);
PlantListAdapter pLA = new PlantListAdapter(this);
Log.d("PLA", pLA.hasContext());
rV.setAdapter(pLA);
rV.setLayoutManager(new LinearLayoutManager(this));

}

И когда вы вызываете этот метод в своем фрагменте, onCrrateView () просто передает представление в качестве параметра. Надеюсь, это поможет вам

...