从 Kotlin 中的文本更改事件添加 ListViewItem

问题描述 投票:0回答:1

如果用户在 ListViewItem 文本中键入:“添加新项目”,我想添加一个新项目。

这是我到目前为止的代码:

class DataModel internal constructor(
    var checked: Boolean,
    var itemDesc: String?,
)

class CustomAdapter(private val dataSet: ArrayList<*>, mContext: Context) :
    ArrayAdapter<Any?>(mContext, R.layout.layout2, dataSet) {

    private class ViewHolder {
        lateinit var checkBox: CheckBox
        lateinit var textInput: TextView
    }

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

    override fun getItem(position: Int): DataModel {
        return dataSet[position] as DataModel
    }

    override fun getView(
        position: Int,
        convertView: View?,
        parent: ViewGroup,
    ): View {
        var convertView = convertView
        val viewHolder: ViewHolder
        val result: View

        if (convertView == null) {
            viewHolder = ViewHolder()

            convertView =
                LayoutInflater.from(parent.context).inflate(R.layout.layout2, parent, false)
            viewHolder.checkBox =
                convertView.findViewById(R.id.checkBox)
            viewHolder.textInput =
                convertView.findViewById(R.id.textInput)

            result = convertView
            convertView.tag = viewHolder
        } else {
            viewHolder = convertView.tag as ViewHolder
            result = convertView
        }

        return result
    }
}
android kotlin android-layout
1个回答
0
投票

我明白多少,要实现当用户键入“添加新项目”时向ListView添加新项目,您可以在editText上实现一个TextWatcher,当文本更改并匹配指定字符串时,您可以添加新项目到你的数据集并通知适配器更新ListView 这是代码:

MainActivity 类:AppCompatActivity() { private Lateinit var customAdapter:CustomAdapter 私有 val 数据集 = ArrayList()

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

    customAdapter = CustomAdapter(dataSet, this)
    listView.adapter = customAdapter

    // Assuming editText is the EditText where the user types
    editText.addTextChangedListener(object : TextWatcher {
        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            // Check if the text matches "Add new item"
            if (s.toString().equals("Add new item", ignoreCase = true)) {
                // Add a new item to the data set
                dataSet.add(DataModel(false, "New Item"))
                // Notify the adapter that the data set has changed
                customAdapter.notifyDataSetChanged()
                // Clear the EditText
                editText.text.clear()
            }
        }

        override fun afterTextChanged(s: Editable?) {}
    })
}

}

© www.soinside.com 2019 - 2024. All rights reserved.