问题描述
我必须在每个子视图的 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 (将#修改为@)