我是Kotlin编程语言的新手。我有一些关于RecycerView和ViewBinding的问题。我的英语可能不好。对此我很抱歉。但我会尽力解释的。如果你能回答我的问题我会很高兴的。请阅读问题,看图片
1.)我们将视图交给LandmarkHolder类的构造函数,但是当我们将此视图发送给RecycerView.Viewholder类的构造函数时,我们将生成binding.root。
a)据我所知,我需要“以同样的方式”在Recycer.Viewholder的构造函数中编写RecycerViewRowBinding(我将其编写为binding)的对象并将其发送到那里。但是为什么我必须编写binding.root而不是“binding”呢?为什么我不能只键入“binding”呢?因为binding已经有了设计本身。
2.)在制作布局膨胀器时,我们通常使用旧方法(R.Layout)访问XML文件。...)并将其膨胀,即转换为java代码,这里的结构发生了变化,当然再次转换为java代码,但有一个我无法解决的困惑情况:
创建了recycler_row.xml文件的一个类,称为recyclerRowBinding。
该类有一个充气方法。我从它的网站上读到的。此外,该类还直接引用布局中与其相关的视图的ID。现在我脑子里想的是:我在这里充气的是什么?因为在以前的用法中(使用finviewbyid),当我们编写iflate方法时,我们在iflate方法中添加了一个源xml文件。(像CardView一样),但是这个新方法没有它。写入父级后,attachtoParent被写入为false。
3.)我们所称的这个父级代表我的RecycerView?
4.)onBindViewHolder函数中的holder对象属于Landmarkholder类。因此它使用此类的属性。但我看到它可以访问名为ItemView的东西。下面是ItemView如何与Landmarkholder类相关联。但是我看的是类本身,没有定义任何与这个itemView相关的内容。这是如何到达ItemView的?当然,调用itemview的目的是调用上下文。如果上下文存在于其中,那么itemview也派生自另一个类。它是从视图类派生的吗?View类有这样的上下文,我猜对吗?我如何用“Holder”对象调用这个itemView?
5.)这个onCreateViewHolderhtml" target="_blank">返回LandmarkHolder(binding)对象。然后需要在其他地方调用这个函数才能工作。(当然,通常应该调用它)但是它是从哪里调用的?在模拟器本身上?
RecyclerViewAdapterRecycler_row.xmlMainActivity.xml
为什么绑定本身不是视图?
我不明白你所有的问题,但也许这个概述会有所帮助。
ViewBinding接受您的每个XML布局,并为它们创建一个绑定类,该类由匹配每个具有ID的视图的属性组成,再加上一个名为root
的属性,该属性保存顶级视图。它还具有名为bind
和invalate
的静态函数。因此,如果您有这样的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical">
<TextView
android:id="@+id/recyclerRowTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Test"
android:textColor="#0820aa"
android:textSize="20sp" />
</LinearLayout>
然后它创建一个与此等价的类(在Java中,但我将展示一个Kotlin版本,因为这是您正在学习的):
class RecyclerRowBinding private constructor(
val root: LinearLayout,
val recyclerRowTextView: TextView
) {
companion object {
fun bind(view: View): RecyclerRowBinding {
val root = view as LinearLayout
val recyclerRowTextView = root.findViewById<TextView>(R.id.recyclerRowTextView)
return RecyclerRowBinding(root, recyclerRowTextView)
}
fun inflate(layoutInflater: LayoutInflater): RecyclerRowBinding {
return inflate(layoutInflater, null, false)
}
fun inflate(layoutInflater: LayoutInflater, parent: ViewGroup?, attachToParent: Boolean): RecyclerRowBinding {
val root = layoutInflater.inflate(R.layout.recycler_row, parent, attachToParent)
return bind(root)
}
}
}
我不太明白你的问题,但有几件事要注意:
RecyclerView.Viewholder抽象类的构造函数需要ItemView
对象,该对象是项布局的根视图,因此必须将Binding.root
传递给该构造函数。绑定本身不是视图。RecycerView.ViewHolder也有这个ItemView
的属性,所以当您创建自己的具有绑定的视图holder时,有两种不同的方法来访问根视图,可以使用holder.binding.root
或holder.ItemView
。但是,binding.root
将是LinearLayout类型,ItemView
将是较不特定的ViewGroup
类型。
adapter.onCreateViewholder()
在需要显示另一个视图并且没有可以回收的以前的视图时由recyrerView调用。
我在你的论坛上潜伏了一段时间,他们在我遇到的各种问题上给了我巨大的帮助,所以谢谢!:d 我正试图创建我的第一个android应用程序,这是一个纸牌游戏,名为shithead,我和我的朋友们过去经常玩。 我觉得我必须非常接近,我只是错过了一些与android或android Studio工作的关键语法。 在我的卡片对象中,我构建了一个字符串idText,它与我保存在Android Studio中我的
也许以前有人问过这个问题,但我似乎找不到一个准确的答案或解决办法。我开始使用RecycerView,并使用LinearLayoutManager实现了它。现在,我想添加自定义的页眉和页脚项,这些项不同于RecycerView中的其他项。页眉和页脚不应该粘,我希望他们滚动与其余的项目。有人能指出一些例子如何做到这一点或只是分享想法。我会非常感激的。THX
我创建了基于创建列表和卡片指南的RecolyerView示例。我的适配器有一个模式实现,只用于扩展布局。 问题是滚动性能不佳。这在一个只有8个项目的RecycleView中。 在一些测试中,我验证了在Android L中不会出现这个问题。但在KitKat版本中,性能的下降是明显的。
我试图在片段中的RecyyerView上设置一个click listener我不知道如何调用片段中的活动我只知道在构造函数中解析上下文,但clickListener以前没有这样做,我试过了,但它根本不起作用 我怎么能做到这一点我试过男人的事情它不起作用 如果我这样做,它会显示红线。在getContext()下;
我知道RecycerView类中没有默认的选择方法,但我尝试了以下方法, 在尝试这段代码时,我得到了预期的输出,但完全不是。 我将用图像来解释这一点。 我如何克服这个问题?有时,如果我快速滚动列表,就会选择其他项目。如何克服这个问题呢? 更新 当我试图在之后使用时,
我尝试在中的之前添加:,但没有任何意义。有人看到是什么引起的吗? 代码如下: 主要活动: 编辑。如果我将自定义数据输入到中,则不会出现日志警告。