我正在探索RecyclerView,我很惊讶地看到RecyclerView它没有onItemClickListener().因为RecyclerView延伸
android.view.ViewGroup
并ListView扩展
android.widget.AbsListView
.不过,我解决我的问题写onClick在我的RecyclerView.Adapter:
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
public TextView txtViewTitle;
public ImageView imgViewIcon;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
}
@Override
public void onClick(View v) {
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然想知道为什么谷歌被删除了onItemClickListener()?
是否有性能问题或其他问题?
RecyclerView与ListView不同,因为它不提供onItemCLickListener类来处理单击事件.
如果通过在ViewHolder中定义onClickListener,单击项目后幕后不会发生很多事情,则可以解决此问题.
如果文本或其他任何必须传递给下一个Activity的内容在ViewHolder有权访问的视图中确实存在,但它是具有RecyclerView的Activity的一部分呢?
在这种情况下,必须在活动内部实现onClickListener,以便可以转发文本.有可能的.
一种方法是添加一个隐藏视图的Invisible View,然后执行之前已经完成的操作; 在适配器中实现onClickListener.
不知何故,将该文本传递给适配器.
怎么能"2" 实施?
我正在尝试编写一个通用的 recyclerview 适配器。我找到了几个例子。然而,仍然无法弄清楚如何实现通用适配器。我写的代码是,
open abstract class BaseAdapter<T : RecyclerView.ViewHolder>(private val onClickListener: View.OnClickListener, @LayoutRes private val layoutResource:Int) :
RecyclerView.Adapter<T>() {
var items: MutableList<Item> = mutableListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): T {
val layout = LayoutInflater.from(parent.context).inflate(layoutResource, parent, false)
layout.setOnClickListener(onClickListener)
return T(layout)
}
override fun getItemCount(): Int {
return items.size
}
}
Run Code Online (Sandbox Code Playgroud)
我在 line 处收到错误return T(layout)。错误是Expression 'T' of type 'Int' cannot be invoked as a function. The function 'invoke()' is not found。