我是新的这些情况下,我想尝试获得动态EditText(s)从RecyclerView的值。
的数据
在布局中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_marginTop="@dimen/_10sdp"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_question"
style="@style/textH4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="bottom"
android:text="Ini adalah tempat pertanyaan pertama" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_answer"
android:layout_width="match_parent"
android:layout_height="@dimen/_120sdp"
android:hint="Tulis jawaban anda"
style="@style/EdittextPrimary"
android:gravity="top"
android:background="@drawable/bg_outline_grey"
android:inputType="textMultiLine"
android:layout_marginTop="@dimen/_10sdp"/>
</LinearLayout>
字符串
问题是。如何获取EditText值并将其放入ArrayList中?
***最新的更新代码:***我添加了我的回收适配器,并尝试了这些:
class RequestJoinAdapter(
val onTextChanged: (text:String,position:Int)->Unit
) :
RecyclerView.Adapter<RequestJoinAdapter.ViewHolder>() {
var listData: MutableList<KeamananModel> = ArrayList()
private var textValue = ""
fun insertAll(data: List<KeamananModel>) {
data.forEach {
listData.add(it)
notifyItemInserted(listData.size - 1)
}
}
fun clear() {
if (listData.isNotEmpty()) {
listData.clear()
notifyDataSetChanged()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
ItemRequestJoinBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = listData[position]
holder.bindTo(item)
holder.binding.etAnswer.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable?) {
onTextChanged.invoke(s.toString(), position)
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
textValue = s.toString().toLowerCase()
}
})
}
override fun getItemCount() = listData.size
inner class ViewHolder(val binding: ItemRequestJoinBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bindTo(item: KeamananModel) {
val context = binding.root.context
binding.tvQuestion.text = item.qt
}
}
private fun isLog(msg: String) {
Log.e("join grup:", msg)
}
}
型
在我当前的Activity中,我曾经添加一些代码,如
RequestJoinAdapter { text, position ->
val values = ArrayList<Jawaban>()
val hashSet = HashSet<Jawaban>()
values.add(Jawaban(pertanyaan_no = position+1, jawaban = text))
hashSet.addAll(values)
values.clear()
values.addAll(hashSet)
val valuest = ArrayList<JawabanKeamanan>()
val hashSets = HashSet<JawabanKeamanan>()
valuest.add(JawabanKeamanan(values))
hashSets.addAll(valuest)
valuest.clear()
valuest.addAll(hashSets)
isLog("currentResult: $valuest")
}
型
我如何将我最新的 valuest 设置到我的var listJawaban: MutableList<JawabanKeamanan> = ArrayList()
中,而不会在其中有任何重复的数据?我想要的是JawabanKeamanan(jawaban_keamanan=[Jawaban(pertanyaan_no=1, jawaban=t)], [Jawaban(pertanyaan_no=2, jawaban=u)])
。谢谢...
1条答案
按热度按时间yshpjwxd1#
最简单的答案是对EditText实现一个
TextWatcher
,并在文本更改时返回数据。现在你可能会问我如何在我的活动中获得这些数据?其实很简单。在适配器中创建一个接口以与Activity通信。
将接口作为构造函数参数传递,以便在Activity中初始化适配器时实现方法。
另一种解决方案是在列表的每个项目中添加一个按钮,并在按钮的
OnClickListener
中调用接口方法。**编辑:**在下面的代码片段中,我使用了一个lambda函数来处理文本的变化。
字符串
注意
onTextChanged.invoke()
方法。这个lambda函数可以像接口一样在适配器和视图之间进行通信。每次更改文本时都会触发此功能。最后示例化你的适配器如下:
型
position
参数用于帮助您了解哪个TextView被更改