我正在寻找解决方案,以遍历Recycler View Adapter元素的所有视图以获取EditText和更改输入。
我使用RecyclerView列表。项目行包含EditText。当用户单击按钮时,我想清除所有项目视图的输入,即使尚未绑定的视图也是如此。我该怎么办?
class ScoresAdapter : RecyclerView.Adapter<ScoresViewHolder>() {
private var scores: List<Score> = ArrayList()
private var listener: ScoreItemListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScoresViewHolder {
val view =
LayoutInflater
.from(parent.context)
.inflate(R.layout.score_item, parent, false)
return ScoresViewHolder(view)
}
override fun getItemCount(): Int {
return scores.size
}
override fun onBindViewHolder(holder: ScoresViewHolder, position: Int) {
val score = scores[position]
holder.playerView.text = score.player.email
holder.totalScoreView.text = score.total().toString()
}
fun setItemListener(listener: ScoreItemListener) {
this.listener = listener
}
fun loadScores(scores: ArrayList<Score>) {
this.scores = scores
notifyDataSetChanged()
}
fun clearInputs() {
// for all scores in list remove text from EditText and set ""
}
inner class ScoresViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var playerView = itemView.findViewById<TextView>(R.id.player)!!
var currentScoreView = itemView.findViewById<EditText>(R.id.current_score)!!
var totalScoreView = itemView.findViewById<TextView>(R.id.total_score)!!
init {
setTextChangedListener(itemView)
}
private fun setTextChangedListener(itemView: View) {
if (listener != null)
currentScoreView.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(text: CharSequence?, start: Int, before: Int, count: Int) {
listener!!.textChanged(itemView, text!!.toString(), adapterPosition)
}
})
}
}
}
答案 0 :(得分:3)
您可以执行以下操作:::
var clearEditText = false
override fun onBindViewHolder(holder: ScoresViewHolder, position: Int) {
val score = scores[position]
holder.playerView.text = if(clearEditText) "" else score.player.email
holder.totalScoreView.text = score.total().toString()
}
fun clearInputs() {
clearEditText = true
notifyDataSetChanged();
}
答案 1 :(得分:0)
我了解您稍后可能需要将EditText
输入作为currentScore
保存在Score
中。
假设这和currentScore
为String
。
在Java中:
public void clearInputs() {
for(Score score: scores) {
score.currentScore = "";
}
notifyDataSetChanged();
}
在科特林:
fun clearInputs() {
for (score in scores)
{
score.currentScore = ""
}
notifyDataSetChanged()
}
答案 2 :(得分:0)
尝试一下可能会起作用
override fun onBindViewHolder(holder: ScoresViewHolder, position: Int) {
val score = scores[position]
holder.playerView.text = if(clearEditText) "" else score.player.email
holder.totalScoreView.text = score.total().toString()
holder.currentScoreView.setText("")
}
public void clearInputs() {
notifyDataSetChanged();
}