我尝试制作一个小型文件管理器,我希望在保存文件或文件夹时能获得上下文菜单,我尝试使用registerForContextMenu(newRecyclerView),但它对我不起作用,根本不会发生任何事,相反,如果我用按钮或ImageView等其他元素来做,菜单会非常完美,我已经在谷歌上搜索了几个小时,但我找到的大多数解决方案都是用java实现的,我不知道如何在kotlin中实现它们,需要记住的一点是,在处理文件时,当我们在目录中导航时,recylerview会不断变化,我想要的是一个菜单,在那里我可以复制、剪切文件等等,我知道还有其他解决方案,但我想用上下文菜单来实现它们,这里是MyAdapter,我不放Main Activity,因为它是一个暴乱
import...
class MyAdapter(private val newsList:
ArrayList<News>):RecyclerView.Adapter<MyAdapter.MyViewHolder>()
{
private lateinit var mListener:OnItemClickListener
interface OnItemClickListener{
fun onItemClick(position: Int)
}
fun setOnItemClicKListener(listener:OnItemClickListener){
mListener = listener
}
override fun onCreateViewHolder(parent: ViewGroup, viewType:
Int): MyViewHolder {
val itemView =
LayoutInflater.from(parent.context).inflate(R.layout.list_items,
parent, false)
return MyViewHolder(itemView, mListener)
}
override fun onBindViewHolder(holder: MyViewHolder, position:
Int) {
val currentItem = newsList[position]
holder.titleImage.setImageResource(currentItem.titleImage)
holder.tvHeading.text = currentItem.heading
}
override fun getItemCount(): Int {
return newsList.size
}
class MyViewHolder(itemView: View, listener:
OnItemClickListener):RecyclerView.ViewHolder(itemView){
val titleImage: ShapeableImageView =
itemView.findViewById(R.id.title_image)
val tvHeading:TextView = itemView.findViewById(R.id.tvHeading)
init{
itemView.setOnClickListener {
listener.onItemClick(adapterPosition)
}
}
}
}
与其用上下文菜单注册整个RecyclerView,不如注册每个子视图。这是因为您持有的是子视图,而不是RecyclerView本身。