Whenever I try to implement the ArrayAdapter on my ListView in my MainActivity.kt file, my app crashes. Once I comment it out, my app is able to run but, of course, it doesn't display the list of names that I want it.
This hasn't given me an issue before and even Googling it hasn't given me much insight into the problem I'm facing. I'm not sure if it may be caused due to me using Fragments as well as Activities. If anyone has any insights, it'd be greatly appreciated
main.kt:
package com.example.contactslist
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
/**
* A simple [Fragment] subclass.
*/
class main : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main, container, false)
}
}
MainActivity.kt:
package com.example.contactslist
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.ListView
class MainActivity : AppCompatActivity() {
var CONTACT_DETAIL_ACTIVITY_REQUEST = 0
val names = ArrayList<String>()
val numbers = ArrayList<Int>()
// Variable to hold relationships
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
names.add("Baraka")
names.add("Blandy")
numbers.add(732)
numbers.add(666)
val contactsAdapter = ArrayAdapter(this, R.layout.activity_listview, names)
val listView1 = findViewById<ListView>(R.id.contact_list)
listView1.setAdapter(contactsAdapter)
val add_new_contact = findViewById<Button>(R.id.add_contacts)
add_new_contact.setOnClickListener {
val name = ""
val phone_number = 1
val relationship = ArrayList<String>()
val intent1 = Intent(this,ContactDetails::class.java)
startActivityForResult(intent1, CONTACT_DETAIL_ACTIVITY_REQUEST)
}
}
}
fragment_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".main">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contacts"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/contact_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</ListView>
</LinearLayout>
<Button
android:id="@+id/delete_contacts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="Delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
</Button>
<Button
android:id="@+id/add_contacts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="Add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
>
</Button>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<fragment
android:id="@+id/fragment"
android:name="com.example.contactslist.main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
activity_listview.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contact_list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<!-- <CheckBox-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:id="@+id/checked"-->
<!-- android:checked="false"/>-->
<TextView
android:id="@+id/contact_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"/>
</LinearLayout>
EDIT: Here's the LogCat Error Log -
10-09 21:19:25.953 21333-21333/? I/art: Not late-enabling -Xcheck:jni (already on) 10-09 21:19:26.167 21333-21339/? E/art: Failed sending reply to debugger: Broken pipe 10-09 21:19:26.168 21333-21339/? I/art: Debugger is no longer active 10-09 21:19:26.736 21333-21333/? W/System: ClassLoader referenced unknown path: /data/app/com.example.contactslist-1/lib/x86 10-09 21:19:27.245 21333-21333/com.example.contactslist W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 10-09 21:19:27.618 21333-21333/com.example.contactslist I/art: Rejecting re-init on previously-failed class java.lang.Class 10-09 21:19:27.618 21333-21333/com.example.contactslist I/art: Rejecting re-init on previously-failed class java.lang.Class 10-09 21:19:27.725 21333-21333/com.example.contactslist W/art: Verification of void androidx.core.view.ViewCompat.dispatchFinishTemporaryDetach(android.view.View) took 103.153ms 10-09 21:19:27.972 21333-21343/com.example.contactslist I/art: Background partial concurrent mark sweep GC freed 2073(241KB) AllocSpace objects, 0(0B) LOS objects, 52% free, 925KB/1949KB, paused 1.940ms total 150.819ms 10-09 21:19:28.074 21333-21370/com.example.contactslist D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 10-09 21:19:28.268 21333-21333/com.example.contactslist E/ArrayAdapter: You must supply a resource ID for a TextView 10-09 21:19:28.269 21333-21333/com.example.contactslist D/AndroidRuntime: Shutting down VM 10-09 21:19:28.271 21333-21333/com.example.contactslist E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.contactslist, PID: 21333 java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:393) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) at android.widget.AbsListView.obtainView(AbsListView.java:2346) at android.widget.ListView.measureHeightOfChildren(ListView.java:1280) at android.widget.ListView.onMeasure(ListView.java:1188) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227) at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) at android.view.View.measure(View.java:18788) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView at android.widget.ArrayAdapter.create
To fix your crash in activity_listview.xml replace
android:id="@+id/contact_name"
with
android:id="@android:id/text1"