Мое приложение падает, когда я пытаюсь использовать ArrayAdapter - PullRequest
0 голосов
/ 10 октября 2019

Всякий раз, когда я пытаюсь реализовать ArrayAdapter в моем ListView в моем файле MainActivity.kt, мое приложение вылетает. После того как я закомментировал это, мое приложение может работать, но, конечно, оно не отображает список имен, которые мне нужны.

Это не вызывало у меня проблемы раньше, и даже поиск в Googleне дал мне особого понимания проблемы, с которой я сталкиваюсь. Я не уверен, может ли это быть вызвано тем, что я использую Фрагменты так же как Действия. Если у кого-то есть какие-либо идеи, мы будем очень признательны

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)
    }
}
}

фрагмент_основной.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>

РЕДАКТИРОВАТЬ: Вот журнал ошибок LogCat -

10-0921: 19: 25,953 21333-21333 /? I / art: Не поздно - включение -Xcheck: jni (уже включено) 10-09 21: 19: 26.167 21333-21339 /? E / art: Не удалось отправить ответ отладчику: Broken pipe 10-09 21: 19: 26.168 21333-21339 /? I / art: отладчик больше не активен 10-09 21: 19: 26.736 21333-21333 /? W / System: ClassLoader ссылается на неизвестный путь: /data/app/com.example.contactslist-1/lib/x86 10-09 21: 19: 27.245 21333-21333 / com.example.contactslist W / art: До Android 4.1,methodandroid.graphics.drawable.Drawable 10-09 21: 19: 27.618 21333-21333 / com.example.contactslist I / art: Отказ от повторной инициализации ранее неудачного класса java.lang.Class 10-09 21: 19: 27.61821333-21333 / com.example.contactslist I / art: Отклонение повторной инициализации для ранее неудачного класса java.lang.Class 10-09 21: 19: 27.725 21333-21333 / com.example.contactslist W / art: Проверкаvoid androidx.core.view.ViewCompat.dispatchFinishTevenDetach (android.view.View) занял 103,153ms 10-09 21: 19: 27.972 21333-21343 / com.example.contactslist I / art: Bчастичная одновременная очистка меток GC освободил 2073 (241 КБ) объектов AllocSpace, 0 (0B) объектов LOS, 52% свободных, 925 КБ / 1949 КБ, приостановлено 1.940 мс всего 150.819 мс 10-09 21: 19: 28.074 21333-21370 / com.example.contactslist D / OpenGLRenderer: Использовать EGL_SWAP_BEHAVIOR_PRESERVED: true 10-09 21: 19: 28.268 21333-21333 / com.example.contactslist E / ArrayAdapter: Вы должны предоставить идентификатор ресурса для TextView 10-09 21: 19: 28.269 21333-21333 / com.example.contactslist D / AndroidRuntime: завершение работы VM 10-09 21: 19: 28.271 21333-21333 / com.example.contactslist E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.contactslist, PID: 21333java.lang.IllegalStateException: ArrayAdapter требует, чтобы ID ресурса был TextView на android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:393) на android.widget.ArrayAdapter.getView (ArrayAdapter.java:36id) и на. AbsListView.obtainView (AbsListView.java:2346) в android.widget.ListView.measureHeightOfChildren (ListView.java:1280) в android.widget.ListView.onMeasure (ListView.java:1188) на android.view.View.measure (View.java:18788) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android.widget.LinearLayout.measureChildBeforeLayout (.java: 1465) на android.widget.LinearLayout.measureVertical (LinearLayout.java:748) на android.widget.LinearLayout.onMeasure (LinearLayout.java:630) на android.view.View.measure (View.java:18788)atroidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren (ConstraintLayout.java:1227)android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) в android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465)на android.widget.LinearLayout.measureVertical (LinearLayout.java:748) на android.widget.LinearLayout.onMeasure (LinearLayout.java:630) на android.view.View.measure (View.java:18788) на android.view. ViewGroup.measureChildWithMargins (ViewGroup.java:5951) в android.widget.FrameLayout.onMeasure (FrameLayout.java:194) в androidx.appcompat.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.j.View.roid.roid. and.av. (View.java:18788) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) на android.widget.LinearLaytical.me. Line.Layj.me. 748) на android.widget.LinearLayout.onMeasure (LinearLayout.java:630) на android.view.View.measure (View.java:18788) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на андроиде. widget.FrameLayout.onMeasure (FrameLayout.java:194) в android.view.View.measure (View.java:18788) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) в android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) в android.widget.LinearLayout.measureVertical (LinearLayout.java:748) в android.widout.Layout.Layay.Layay.Laye.May: 630) в android.view.View.measure (View.java:18788) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) в android.widget.FrameLayout.onMeasure (FrameLayout.java:194) в com.android.internal.policy.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2643) в android.view.View.measure (View.java:18788) в android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2100) вandroid.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1216) в android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1452) в android.view.ViewRootImpl.doTraversal (ViewRootroid.mpl.View.View.View.View.View.View.View.View.View.View.view.j.7) .jpg$ TraversalRunnable.run (ViewRootImpl.java:6013) в android.view.Choreographer $ CallbackRecord.run (Choreographer.java:858) в android.view.Choreographer.doCallbacks (Choreographer.java:670) в android.view.Choreographer.doFrame (Choreographer.java:606) в android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:844) в android.os.Hler(Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Причина: java.lang.ClassCastException: android.widget.LinearLayout нельзя преобразовать в android.widget.TextView в android.widget.ArrayAdapter.create

Ответы [ 3 ]

3 голосов
/ 10 октября 2019

Чтобы исправить ваш сбой в activity_listview.xml, замените

android:id="@+id/contact_name"

на

android:id="@android:id/text1"
0 голосов
/ 10 октября 2019

Сбой, вероятно, из-за того, что ArrayAdpater ожидает TextView, но вы передали LinearLayout:

Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView at android.widget.ArrayAdapter.create

В вашем activity_listview.xml вам нужно удалить LinearLayout, который переноситTextView:

activity_listview.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/contact_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="20sp" />
0 голосов
/ 10 октября 2019

Чтобы устранить эту проблему, замените строку из кода ниже.

val contactsAdapter = ArrayAdapter(this, R.layout.activity_listview, names)

С

val contactsAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...