如果用户在 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
}
}
我明白多少,要实现当用户键入“添加新项目”时向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?) {}
})
}
}