[kotlin] setOnclickListener d'un editview dans un recylerview
Bonjour,
Je cherche à surveiller les changements dans les editview placés dans un recyclerview. Cependant je ne comprends pas trop où placer le setOnclickListener sachant que à mon avis, il faudrait le placer dans le main activity mais je n'ai pas encore une connaissance suffisante du langage pour comprendre comment faire (ou alors je me trompe).
J'ai fait des essais en le plaçant dans le oncreateviewholder ou le onbindviewholder mais cela déclenche directement la fonction placée dans l'écouteur, sans attendre un changement dans le edit text.
Qu'en pensez-vous ? Merci à vous :)
Voici mon code :
L'adapter :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
import android.annotation.SuppressLint
import android.content.Context
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import java.util.logging.Logger
open class CustomAdapter(private val data: List<String>, private val activity: MainActivity) :
RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
internal lateinit var list: List<String>
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val rowItem: View =
LayoutInflater.from(parent.context).inflate(R.layout.list_item_view, parent, false)
var myview= ViewHolder(rowItem)
return myview
}
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
holder.editText.setText(data[position])
}
override fun getItemCount(): Int {
return data.size
}
inner class ViewHolder(rowItem: View) : RecyclerView.ViewHolder(rowItem) {
val editText : EditText= rowItem.findViewById(R.id.editText)
val editText2 : EditText= rowItem.findViewById(R.id.editText2)
fun setOnClickListener() {
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
activity.fonction()
}
})
}
init {
}
}
} |
Le main activity
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = CustomAdapter(generateData(),this)
recyclerView.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
var textView2: TextView
textView2 = findViewById(R.id.textView)
var editText : EditText
}
fun clickEditText1(list:String, str: String, pos: Int){
var textView2: TextView
textView2 = findViewById(R.id.textView)
textView2.setText("!!!!!!")}
fun fonction ()
{
var textView2: TextView
textView2 = findViewById(R.id.textView)
textView2.text="!!!!!!"
}
private fun generateData(): List<String> {
val data: MutableList<String> = ArrayList()
for (i in 0..99) {
data.add(i.toString() + "th Element")
}
return data
}
}
//} |