エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

【Android】RecyclerViewにタップイベントを実装する方法

RecyclerViewにタップイベントを実装する方法のメモ。

 

・参考動画

https://www.youtube.com/watch?v=69C1ljfDvl0

 

実装手順

1, Adapterクラスに、タップ処理のinterfaceを作成する。

2, Activity/Fragmentでinterfaceを実装する。

 

1, Adapterクラスに、タップ処理のinterfaceを作成する。

// プライマリコンストラクタに、作成したinterfaceをsetする
class ListAdapter(private val listener: OnItemClickListener): RecyclerView.Adapter<ListAdapter.UserViewHolder>() {

private var userList = emptyList<User>()

inner class UserViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
init {
itemView.setOnClickListener(this)
}

override fun onClick(v: View?) {
val position = adapterPosition
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position)
}
}
}

// タップイベント用のinterfaceを作成
interface onItemClickListener {
fun onItemClick(position: Int)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
return UserViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_item, parent, false))
}

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

override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
val currentItem = userList[position]
holder.itemView.textView.text = currentItem.user.toString()
}

fun setData(user: List<User>) {
this.userList = word
notifyDataSetChanged()
}

}

 

 

2, Activity/Fragmentでinterfaceを実装する。

// ListAdapterのOnItemClickListenerを実装する
class FirstFragment : Fragment(), ListAdapter.OnItemClickListener {

private lateinit var mUserViewModel: UserViewModel
private lateinit var adapter: ListAdapter

override fun createView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_first, container, false)

adapter = ListAdapter(this)
val recyclerView = view.recyclerview
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(requireContext())

mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
mUserViewModel.readAllData.observe(viewLifecycleOwner, Observer { user ->
adapter.setData(user)
})

view.fab.setOnClickListener {
findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
}

setHasOptionsMenu(true)
return view
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_main, menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.action_delete) {
deleteAllWords()
}
return super.onOptionsItemSelected(item)
}

override fun onItemClick(position: Int) {
// タップイベントの処理をここで実装する。
val diary = adapter.getDate(position)
}

}

 

 

 実装にかなり手こずってしまったが、Adapterにinterfaceを作成、Activity/Fragmentでinterfaceを実装する

 

~~ 長押しの実装方法など随時更新 ~~