在子布局的editText中输入数据时,Android可扩展Listview子视图行为不正确

问题描述

我必须在每个子视图的 editText 中输入文本并计算每个组的总和。问题是,当我在一个组中的 editText 中输入值,然后尝试展开其上方的组时,当前组中的值会转移到我展开的组中。

任何帮助将不胜感激。

这是我的 Adapter 类代码

package com.safeguard.adapter

import android.content.Context
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.appcompat.widget.AppCompatimageView
import com.safeguard.R
import com.safeguard.model.AdditionalService
import com.safeguard.model.PpmServiceAdditional
import com.safeguard.model.ServiceDetailAdditional
import com.safeguard.utils.Utils
import java.util.*


class NewAdapteradditionalService(
        val context: Context,val additionalServices: Vector<AdditionalService>,private val expandableListView: ExpandableListView,private var totalAmount: Int,var textWatcher: TextWatcher

) : Baseexpandablelistadapter() {

    private val CHILD_LAYOUT_A: Int = 1
    private val CHILD_LAYOUT_C: Int = 2
    private var groupPos = -1
    private var childPos = -1

    override fun getGroupCount(): Int {
        return additionalServices.size
    }

    override fun getChildrenCount(groupPosition: Int): Int {
        return additionalServices[groupPosition].additionalServiceList!![0].serviceDetails!!.size
    }

    override fun getGroup(groupPosition: Int): Any {
        return additionalServices[groupPosition].additionalServiceList!![0]
    }

    override fun getChild(groupPosition: Int,childPosition: Int): Any {
        return additionalServices[groupPosition].additionalServiceList!![0].serviceDetails!![childPosition]
    }

    override fun getGroupId(groupPosition: Int): Long {
        return groupPosition.toLong()
    }

    override fun getChildId(groupPosition: Int,childPosition: Int): Long {
        return childPosition.toLong()
    }

    override fun hasstableIds(): Boolean {
        return true
    }

    override fun getGroupView(groupPosition: Int,isExpanded: Boolean,convertView: View?,parent: ViewGroup?): View {
        var convertView = convertView
        val additionalService = getGroup(groupPosition) as PpmServiceAdditional

        if (convertView == null) {
            val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
            convertView = inflater.inflate(R.layout.each_row_header_additional_service,null)
        }

        val checkBoxGroupAdditionalService = convertView!!.findViewById<AppCompatimageView>(R.id.checkBox_group_additional_service)
        val additionalServiceName = convertView!!.findViewById<TextView>(R.id.textView_additional_service_name)
        val textViewCountLeft = convertView!!.findViewById<TextView>(R.id.textView_additional_service_count)

        additionalServiceName.text = additionalService.aditionalServiceName

        val imageResourceId: Int = if (isExpanded) R.drawable.checked_blue else R.drawable.unchecked
        checkBoxGroupAdditionalService.setimageResource(imageResourceId)

        if (additionalService.displayServiceCount == "Y") {
            if (additionalService.availableServiceCount == "0" ||
                    additionalService.availableServiceCount == "") {
                textViewCountLeft.setTextAppearance(context,R.style.hint_or_disable_text_normal)
                additionalServiceName.setTextAppearance(context,R.style.hint_or_disable_text)
                checkBoxGroupAdditionalService.setimageResource(R.drawable.unchecked_disabled)
            }
            textViewCountLeft.text = "${additionalService.availableServiceCount}${context.resources.getString(R.string.remaining)}"
        } else {
            textViewCountLeft.text = ""
        }

        return convertView!!
    }

    override fun getChildView(groupPosition: Int,childPosition: Int,isLastChild: Boolean,parent: ViewGroup?): View {

        var convertView = convertView
        val additionalServiceDetail = getChild(groupPosition,childPosition) as ServiceDetailAdditional

        if (convertView == null) {
            val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
            convertView = inflater.inflate(R.layout.each_row_child_additional_service_layout_a,parent,false)
        }
        
        convertView!!.tag = getLayoutType(groupPosition,childPosition)

        if (convertView!!.tag == CHILD_LAYOUT_A) {
            val serviceDetailName = convertView!!.findViewById<View>(R.id.textView_additional_service_name) as TextView
            val totalReimbursementAmount = convertView.findViewById<View>(R.id.total_reimbursement_amount_textView) as TextView
            val serviceDetailEditText = convertView.findViewById<View>(R.id.txt_reimbursement_amt) as EditText
            val serviceDetailCheckBox = convertView.findViewById<View>(R.id.checkBox_child_additional_service) as AppCompatimageView
            val layoutB = convertView.findViewById<LinearLayout>(R.id.layout_b)
            val layoutA =convertView.findViewById<RelativeLayout>(R.id.layout_a)

            layoutB.visibility = View.GONE
            layoutA.visibility = View.VISIBLE

            serviceDetailName.text = additionalServiceDetail.name

            serviceDetailCheckBox.setonClickListener(View.OnClickListener { v: View? ->
                additionalServiceDetail.isChildSelected = !additionalServiceDetail.isChildSelected!!
                if (!additionalServiceDetail.isChildSelected!!) {
                    additionalServiceDetail.enteredReimbursementAmount = ""
                }
                notifyDataSetChanged()
            })

            if (additionalServiceDetail.isChildSelected!!){
                serviceDetailEditText.isFocusable = true;
                serviceDetailEditText.isEnabled = true;
                serviceDetailEditText.isFocusableInTouchMode = true
                serviceDetailEditText.background = context.getDrawable(R.drawable.inputfield_blank_new)
                serviceDetailCheckBox.setimageResource(R.drawable.checked_blue)
            } else {
                serviceDetailEditText.isFocusable = false;
                     serviceDetailEditText.isEnabled = false;
                serviceDetailEditText.background = context.getDrawable(R.drawable.inputfield_blank_disabled_new)
                serviceDetailCheckBox.setimageResource(R.drawable.unchecked)
            }

            totalReimbursementAmount.text = additionalServices[groupPosition].additionalServiceList!![0].aditionalServiceName + " " +
                    context.resources.getString(R.string.TotalAmount) + ":"


        } else if (convertView!!.tag == CHILD_LAYOUT_C) {
            val serviceDetailName = convertView!!.findViewById<View>(R.id.textView_additional_service_name_b) as TextView
            val serviceDesc = convertView.findViewById<View>(R.id.service_notes) as TextView
           val layoutA = convertView.findViewById<RelativeLayout>(R.id.layout_a)
            val layoutB = convertView.findViewById<LinearLayout>(R.id.layout_b)


            layoutA.visibility = View.GONE
            layoutB.visibility = View.VISIBLE

            serviceDetailName.text = additionalServiceDetail.name
            serviceDesc.text = additionalServiceDetail.serviceNotes
        } else {
            val serviceDetailName = convertView!!.findViewById<View>(R.id.textView_additional_service_name_b) as TextView
            val serviceDesc = convertView.findViewById<View>(R.id.service_notes) as TextView
            serviceDesc.visibility = View.GONE
            serviceDetailName.text = additionalServiceDetail.name
            val layoutA = convertView.findViewById<RelativeLayout>(R.id.layout_a)
            val layoutB = convertView.findViewById<LinearLayout>(R.id.layout_b)
            layoutA.visibility = View.GONE
            layoutB.visibility = View.VISIBLE
        }


        Utils.log("Group position: ",groupPosition.toString())
        Utils.log("Child position: ",childPosition.toString())

        return convertView!!
    }

     fun getLayoutType(groupPosition: Int,childPosition: Int): Int {
        return when (additionalServices[groupPosition].additionalServiceList!![0].serviceDetails!![childPosition].costLayout) {
            "A" -> CHILD_LAYOUT_A
            "C" -> CHILD_LAYOUT_C
            else -> 0
        }
    }

    override fun isChildSelectable(groupPosition: Int,childPosition: Int): Boolean {
        return false
    }

}

我是 android 新手,任何帮助将不胜感激。

更新:当我调试时,我发现当我首先扩展第二组(组 1)然后扩展第一组时,子视图首先为组 0 调用,然后为组 1 和 UI 再次调用,来自组 1 的 editTexts 的值正在转移到组 0 的 editTexts。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...