Skip to content
Advertisement

Attempt to invoke virtual method ‘void android.widget.ListView.setAdapter(android.widget.ListAdapter)’ on a null object reference :KOTLIN

I am getting this from Logcat

2022-01-07 20:27:46.539 14327-14327/com.example.donedoobnew2 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.donedoobnew2, PID: 14327 java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.ListView.setAdapter(android.widget.ListAdapter)’ on a null object reference at com.example.donedoobnew2.Fragments.FragmentMinistries.onCreateView(FragmentMinisteries.kt:29)

FragmentMinistries.kt

class FragmentMinistries : Fragment() {
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?,
): View? {

    val customListData = ArrayList<CList>()
    val customList = CListAdapter(this.requireContext(), customListData)

    customListData.add(CList(R.drawable.ic_call, "First"))
    customListData.add(CList(R.drawable.ic_call, "Second"))
    customListData.add(CList(R.drawable.ic_call, "Third"))

    lv_donedoob_ministries.adapter = customList

    return LayoutInflater.from(container?.context)
        .inflate(R.layout.fragment_ministeries, container, false)
}

}

CListAdapter.kt

class CListAdapter(private val getContext: Context, private val customListItem: ArrayList<CList>) :
ArrayAdapter<CList>(getContext, 0, customListItem) {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    var listLayout = convertView
    var holder: ViewHolder

    if (listLayout == null) {
        val inflateList = (getContext as Activity).layoutInflater
        listLayout = inflateList.inflate(R.layout.item_cardview_donedoob, parent, false)

        holder = ViewHolder()
        holder.mTextView = listLayout!!.findViewById(R.id.tv_card_donedoob)
        holder.mImageListView = listLayout.findViewById(R.id.iv_card_donedoob)

        listLayout.tag = holder
    } else {
        holder = listLayout.tag as ViewHolder
    }

    val listItem = customListItem[position]
    holder.mImageListView!!.setImageResource(listItem.mCListImage)
    holder.mTextView!!.text = listItem.mCListText


    return listLayout
}

class ViewHolder {
    internal var mImageListView: ImageView? = null
    internal var mTextView: TextView? = null
}

}

CList.kt

class CList(
var mCListImage: Int,
var mCListText: String,
)

fragment_ministries.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="@color/gray"
tools:context=".Fragments.FragmentMinistries">

<ListView
    android:id="@+id/lv_donedoob_ministries"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:dividerHeight="10dp"
    android:divider="@color/gray"
    android:padding="20dp">

</ListView>

</FrameLayout>

item_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/round_buttons"
android:orientation="horizontal">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/iv_card_donedoob"
        android:layout_width="180dp"
        android:layout_height="150dp"
        android:src="@drawable/icon_my_documents" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_card_donedoob"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ministry og edu"
            android:textSize="24sp" />

    </LinearLayout>

</LinearLayout>
</LinearLayout>

Advertisement

Answer

You are trying to access ListView before inflating fragment view.

class FragmentMinistries : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {

        val customListData = ArrayList<CList>()
        val customList = CListAdapter(this.requireContext(), customListData)

        customListData.add(CList(R.drawable.ic_call, "First"))
        customListData.add(CList(R.drawable.ic_call, "Second"))
        customListData.add(CList(R.drawable.ic_call, "Third"))
        val view = LayoutInflater.from(container?.context)
            .inflate(R.layout.fragment_ministeries, container, false)

        view.findViewById<ListView>(R.id.lv_donedoob_ministries).adapter = customList

        return view
    }
}
Advertisement