Может кто-нибудь сказать мне, как работать с реселлером просмотра на прослушивателе кликов в kotlin - PullRequest
0 голосов
/ 17 марта 2020

Это код действия, в котором будут показаны строки

class doctors : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_doctors)

    val recyclerView = findViewById<RecyclerView>(R.id.docrecview)


    recyclerView.layoutManager = LinearLayoutManager(this)


    val docs = ArrayList<DocData>()





    val btn_click_me = findViewById<Button>(R.id.consult_btn)

    btn_click_me.setOnClickListener {
        Toast.makeText(this, "You clicked me.", Toast.LENGTH_SHORT).show()
    }


    val TAG = "My message"
    val db = FirebaseFirestore.getInstance()
//calling data from firebase to populate rows
    db.collection("doctors")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {
                Log.d(TAG, "${document.id} => ${document.data}")
                docs.add(DocData(document.data["name"].toString(), document.data["specialization"].toString()))

            }
            recyclerView.adapter = Adapter(docs)


        }
        .addOnFailureListener { exception ->
            Log.d(TAG, "Error getting documents: ", exception)
        }




}

А это адаптер

class Adapter (val doctorlist: ArrayList<DocData>) : RecyclerView.Adapter<Adapter.ViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Adapter.ViewHolder {
    val v = LayoutInflater.from(parent?.context).inflate(R.layout.user_row, parent, false)
    return ViewHolder(v)


}

override fun getItemCount(): Int {
    return doctorlist.size
}

override fun onBindViewHolder(holder: Adapter.ViewHolder, position: Int) {
    val doc:DocData = doctorlist[position]

    holder.txtname.text =  doc.name
    holder.txtSpec.text = doc.specialization

}

class ViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

    val txtname = itemView.findViewById<TextView>(R.id.textName)
    val txtSpec = itemView.findViewById<TextView>(R.id.major)
    val btn = itemView.findViewById<Button>(R.id.consult_btn)

}

}

Обозначенная красным область - это кнопка в обзоре переработчика, и я хочу go перейти к другому виду деятельности, нажав на эту кнопку, и я не могу понять, что это мой этап обучения. Я буду благодарен, если вы ребята, заранее спасибо спасибо

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

У вас есть два варианта. Или используйте интерфейсы или функция более высокого порядка , я предпочитаю позже. с функциями вы передаете функцию onClick, которая вызывается при нажатии на btn:

class Adapter(
    private val docList: List<DocData>,
    private val onClick: (DocData) -> Unit // a function that takes a DocData parameter
) : RecyclerView.Adapter<Adapter.ViewHolder>() {
    // ......

    override fun onBindViewHolder(holder: Adapter.ViewHolder, position: Int) {
        val doc: DocData = doctorlist[position]
        btn.setOnClickListener {
            onClick.invoke(doc)
        }
        //.....
    }

}

, а затем передаете функцию при создании экземпляра Adapter:

Adapter(docs) { docData ->
    // btn was clicked in this docData
}
0 голосов
/ 17 марта 2020

См. { ссылка }. Вам нужно создать интерфейс вроде:

public interface ClickListener {
    void onClick(int position);
}

Там вы можете поместить любые параметры, не только position. В активности / фрагменте реализован интерфейс. Затем вызовите его из onBindViewHolder():

@Override
public void onBindViewHolder(holder: Adapter.ViewHolder, position: Int) {
     holder.textView1.setOnClickListener{
         clickListener.onClick(position));
     }
}

Также вам нужно установить clickListener с помощью метода или конструктора адаптера.

...