【问题标题】:An error occurred when scroll down on ListView in android (kotlin)在 android (kotlin) 中的 ListView 上向下滚动时发生错误
【发布时间】:2018-07-29 18:19:45
【问题描述】:

当我向下滚动列表视图时出现错误。当滚动到达活动底部时,发生错误。一件奇怪的事情就在这里。在 kotlin 代码上,有“DataController.getDataList()”函数。这个函数得到 10 个数据列表作为 ArrayList,但我的模拟器中只有 9 个数据。我的代码有什么问题?

activity_spiral_test_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    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"
    tools:context=".spiralTestListActivity"
    android:background="@color/Background">

    <ListView
        android:id="@+id/patientList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ViewStub
        android:id="@+id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout="@layout/empty"/>

    <android.support.design.widget.FloatingActionButton
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/add"
        android:layout_margin="40dp"
        android:scaleType="center"
        android:tint="@android:color/white"
        android:backgroundTint="@color/Primary"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:borderWidth="0dp"/>

</android.support.constraint.ConstraintLayout>

患者列表项.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="match_parent"
    android:orientation="vertical">

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

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="30dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/patientName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Test Patient"
                android:textSize="40sp"
                android:textColor="@android:color/black"
                android:textStyle="bold"/>

            <TextView
                android:id="@+id/patientDescription"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Test Explanation"
                android:textSize="25sp"/>
        </LinearLayout>

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:layout_marginEnd="40dp"
            android:orientation="vertical">

            <ImageView
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:src="@drawable/assignment"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Test"
                android:textSize="20sp"/>

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

spiralTestListActivity.kt

import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import myPackage.DataController
import myPackage.PatientData
import kotlinx.android.synthetic.main.activity_spiral_test_list.*

class spiralTestListActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_spiral_test_list)

        patientList.adapter = patientAdapter(this, DataController.getDataList())
        patientList.emptyView = empty
    }

    private inner class ViewHolder {
        lateinit var name: TextView
        lateinit var description: TextView
    }

    inner class patientAdapter(context: Context, val listItem: ArrayList<PatientData>) : BaseAdapter() {
        private val mInflator: LayoutInflater = LayoutInflater.from(context)

        override fun getCount(): Int {
            return this.listItem.size
        }

        override fun getItemId(position: Int): Long {
            return position.toLong()
        }

        override fun getItem(position: Int): Any {
            return this.listItem[position]
        }

        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            val view: View
            val holder: ViewHolder

            if (convertView == null) {
                view = mInflator.inflate(R.layout.patient_list_item, parent, false)

                holder = ViewHolder()
                holder.name = view.findViewById(R.id.patientName) as TextView
                holder.description = view.findViewById(R.id.patientDescription) as TextView
            }
            else {
                view = convertView
                holder = convertView.tag as ViewHolder
            }

            val patient = getItem(position) as PatientData
            val name = holder.name
            val description = holder.description

            name.text = patient.name
            description.text = patient.description

            return view
        }
    }
}

【问题讨论】:

    标签: android listview kotlin listadapter


    【解决方案1】:

    我解决了这个问题。由于线程而发生此问题。当然,数据的控制器是适配器。但是,我在我的对话框类中添加了数据。(上面的代码有一些不同的部分。我改变了它..)所以,当线程要求从适配器获取数据时,数据与 ListView 的数据不同。发生错误。

    我修复了适配器类和对话框类中的代码。在适配器类中,我添加了一个名为 add 的函数。

    fun add(data: PatientData) {
        DataController.addData(data)
    }
    

    此外,还有一件事。在SpiralTestListActivity.ky中,我不加

    convertView.tag = holder
    

    在适配器类的else部分之上..!!

    这些部件使我的应用程序正常运行..!

    【讨论】:

      【解决方案2】:

      当我使用列表视图时,我也发现了这个问题.. 您的问题是,当您向下滚动时,它会给出错误或刷新列表本身.. 您需要做的是使用列表中每个项目的位置并获得更多帮助,我认为您应该访问此链接.. Link

      【讨论】:

      • 这个链接和这个问题有什么关系?
      • 我认为链接有问题.. 你能再检查一下链接吗?
      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 2019-05-17
      • 1970-01-01
      • 2013-05-23
      • 2016-06-08
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多