NullPointerException в OnCreate с RecyclerView - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю список повторного просмотра изображений с текстом и не могу понять, почему я получаю нулевой указатель ... код выглядит следующим образом:

MainActivity.Java

package com.mdadi.animals2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView list; //RecyclerView instance
    private RecyclerView.Adapter mAdapter; //Adapter
    private RecyclerView.LayoutManager layoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_recycler_view);

        ArrayList<ListData> listData = initData();

        final EditText editText = findViewById(R.id.editTxt);
        list = findViewById(R.id.recyclerView);
        list.setHasFixedSize(true);


        layoutManager = new LinearLayoutManager(this);
        list.setLayoutManager(layoutManager);

        mAdapter = new MyAdapter(listData);
        list.setAdapter(mAdapter);

/*        findViewById(R.id.delBtn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String newFact = editText.getText().toString();
                mAdapter.notifyItemInserted(list.size() - 1);
            }
        });*/
    }

    private ArrayList<ListData> initData() {
        ArrayList<ListData> list = new ArrayList<>();

        list.add(new ListData("bird\n",R.drawable.bird)); //1
        list.add(new ListData("cat\n",R.drawable.cat)); //2
        list.add(new ListData("dog\n",R.drawable.dog)); //3
        list.add(new ListData("fish\n",R.drawable.fish)); //4
        list.add(new ListData("kangaroo\n",R.drawable.kangaroo)); //5
        list.add(new ListData("monkey\n",R.drawable.monkey)); //6
        list.add(new ListData("turtle\n",R.drawable.turtle)); //7
        list.add(new ListData("horse\n",R.drawable.horse)); //8
        list.add(new ListData("elephant\n",R.drawable.elephant)); //9
        list.add(new ListData("turkey\n",R.drawable.turkey)); //10

        return list;
    }
}

MyAdapter.Java

    package com.mdadi.animals2;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private ArrayList<ListData> data;

    public MyAdapter(ArrayList<ListData> data) {
        this.data = data;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View rootView = LayoutInflater.from(parent.getContext()).inflate
                (R.layout.recycler_view_item, parent, false);

        return new MyViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        ListData listData = data.get(position);
        //String message = data.get(position).getDesc();
        //holder.textView.setText(message);
        holder.textView.setText(listData.getDesc());
        holder.img.setImageResource(listData.getImgURL());
    }

    @Override
    public int getItemCount() {
        if (data != null)
            return data.size();
        else
            return 0;
    }
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private ImageView img;
        private View view;

        public MyViewHolder(View view) {
            super(view);
            this.view = view;
            textView = view.findViewById(R.id.fact);
            img = view.findViewById(R.id.image);
        }

        public TextView getTextView() {
            return textView;
        }
    }
}

ListData.Java

    package com.mdadi.animals2;

public class ListData {
    private String desc;
    private int imgURL;

    public ListData(String desc, int imgURL) {
        this.desc = desc;
        this.imgURL = imgURL;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getDesc() {
        return desc;
    }

    public int getImgURL() {
        return imgURL;
    }
}

my_recycler_view.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editTxt"
        android:layout_alignParentTop="true"
        android:id="@+id/recyclerView"
        android:scrollbars="vertical"
        tools:listitem="@layout/recycler_view_item" />

    <EditText
        android:id="@+id/editTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toStartOf="@+id/btnAdd"
        android:layout_alignTop="@+id/btnAdd"/>

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:text="@string/add_fact_button" />

</RelativeLayout>

И, наконец, исключение: Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.support.v7.widget.RecyclerView.setHasFixedSize (boolean)» для ссылки на пустой объект в com.mdadi.animals2.MainActivity.onCreate (MainActivity.java): 28)

Любая помощь приветствуется, спасибо!

...