IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[kotlin] setOnclickListener d'un editview dans un recylerview


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 17
    Points : 19
    Points
    19
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        }
    }
     
     
    //}

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    J'ai fini par trouver ! Voici ci-dessous la solution. N'hésitez pas à donner votre avis si le code vous paraît bizarre

    Dans le onbindViewHolder, j'ai fait holder.setOnClickListener.

    ça déclenche le listener. Et dans le listener, j'ai pu faire un aferTextChanged pour editText1 et un aferTextChanged pour editText2 avec des fonctions différentes, ce que je cherchais

    Prochaine étape : garder en mémoire les données du recycleview et travailler sur la persistance des données

    Solution :


    Adapter


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    101
    102
    103
    104
    105
     
     
     
     
    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])
            holder.setOnClickListener()
     
        }
     
     
     
     
        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?) {
     
                            activity.fonction()
                        }
     
                        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
     
                        }
     
                        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
     
     
     
                        }
     
     
     
                    })
     
               editText2.addTextChangedListener(object : TextWatcher {
                   override fun afterTextChanged(p0: Editable?) {
                       activity.fonction2()
     
                   }
     
                   override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
     
                   }
     
                   override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
     
     
     
                   }
     
     
     
               })
     
            }
     
               init {
     
     
            }
        }
     
    }



    main Activity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
     
    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 fonction ()
        {
     
            var textView2: TextView
            textView2 = findViewById(R.id.textView)
            textView2.text="!!!!!!"
        }
     
     
        fun fonction2 ()
        {
     
            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
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/12/2012, 16h53
  2. comment récuperer le texte dans un editview
    Par jrbzh dans le forum MFC
    Réponses: 11
    Dernier message: 02/06/2005, 16h43
  3. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo