Как сделать элементы Recyclerview интерактивными? - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать приложение для заметок, которое позволит пользователю делать простые заметки и сохранять их. Я использовал базу данных области, чтобы сохранить заметки пользователей. Заметки отображаются нормально в recyclerview, но я не могу их щелкнуть.

Я хочу, чтобы произошло следующее: когда нажимается одна из заметок в recyclerview, я хочу начать новую деятельность.

адаптер

class NotesAdapter(private val context:Context, private val notesList: RealmResults<Notes>):RecyclerView.Adapter<RecyclerView.ViewHolder>(){

   private lateinit var mOnClickListener:View.OnClickListener
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.notes_rv_layout,parent,false)
        v.setOnClickListener(mOnClickListener)
        return ViewHolder(v)
    }

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

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        holder.itemView.titleTV.text = notesList[position]!!.title
        holder.itemView.descTV.text = notesList[position]!!.description
        holder.itemView.idTV.text = notesList[position]!!.id.toString()

    }
    private fun onClick(view:View) {
        
    }

    class ViewHolder(v: View?):RecyclerView.ViewHolder(v!!){
        val title = itemView.findViewById<TextView>(R.id.titleTV)
        val desc = itemView.findViewById<TextView>(R.id.descTV)
        val id = itemView.findViewById<TextView>(R.id.idTV)

    }
}

основной вид деятельности

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //init views
        realm  = Realm.getDefaultInstance()
        addNotes = findViewById(R.id.addNotes)
        notesRV = findViewById(R.id.NotesRV)

        //onclick add notes button

        addNotes.setOnClickListener {
            val intent = Intent(this, AddNotesActivity::class.java)
            startActivity(intent)
            finish()
        }

        notesRV.layoutManager = StaggeredGridLayoutManager(2,LinearLayoutManager.VERTICAL)
        getAllNotes()
    }

    private fun getAllNotes() {

        notesList = ArrayList()
        val results:RealmResults<Notes> = realm.where<Notes>(Notes::class.java).findAll()
        notesRV.adapter = NotesAdapter(this, results)
        notesRV.adapter!!.notifyDataSetChanged()
    }
}

1 Ответ

0 голосов
/ 13 июля 2020

используйте для этого onBindViewHolder:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

    holder.itemView.titleTV.text = notesList[position]!!.title
    holder.itemView.descTV.text = notesList[position]!!.description
    holder.itemView.idTV.text = notesList[position]!!.id.toString()

    holder.itemView.setOnClickListener{
       val intent = Intent(holder.itemView.context,YourActivity::class.java)
       holder.itemView.context.startActivity(intent)
    }

}
...