gpt4 book ai didi

安卓| ViewHolder

转载 作者:行者123 更新时间:2023-11-29 17:12:39 37 4
gpt4 key购买 nike

我已经采用了一个示例代码来实现 RecyclerView,但试图将其转换为在我的应用程序的子 fragment 中工作。

代码在“创建列表 - 示例”下 Creating Lists and Cards

我的适配器出了问题..

public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}

> @Override
> public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
> int viewType) {
> View v = LayoutInflater.from(parent.getContext())
> .inflate(R.layout.my_text_view, parent, false);
> ViewHolder vh = new ViewHolder(v);
> return vh;
> }

首先,它没有构建,提示我正在用一个 View 调用构造函数 ViewHolder,而构造函数需要一个 TextView。看了代码,同意!但这是官方的例子,所以它一定是正确的?

那么我的版本和例子相比有什么不同呢?我能想到的两件事...

1)示例中未给出布局 my_text_view,因此我自己制作。我做对了吗?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:id="@+id/t_title"
android:title="title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

</LinearLayout>

2)我正在从我的子 fragment 中调用适配器,并且编写示例时并未考虑 fragment 。我可能咬掉的东西超出了我在那里的理解范围。

不过,据我所知,正在努力解决这个问题。进入我的 OnCreateViewHolder 的“父级”是我的 RecyclerView 吗?

'v' 应该是我的 'my_text_view' 的 LinearLayout 吗?

'ViewHolder' 应该最终成为一个类,其属性 mTextView 等于我的 xml 中的 TextView。

我只是不明白如何从 v=LinearLayout 转到 TextView??

有人愿意帮这个菜鸟解释一下吗??

最佳答案

那个例子不是很好。看起来像是两个不同的项目拼接在一起。它应该是这样的:

   public class MyAdapter extends RecyclerView.Adapter {
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.t_title);
}
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
}

解释这个 fragment :

onCreateViewHolder 是在 RecyclerView 需要创建一种新类型的 ViewHolder 时调用的方法。这可能只被调用十几次以获得足够的 View 来覆盖屏幕,或者如果您有许多 View 类型,它可能会被调用很多次。

在这种情况下,参数 parent 将是伴随它的 RecyclerView。为什么不让它成为 RecycerView?因为谷歌设计师决定它应该是一个 ViewGroup。此外,它还是一个 Adapter 模式,因此您应该拥有的唯一保证是它是一个 ViewGroup(即,可能不是 RecyclerView,因此您不应该构建 Adapter以那个假设)。实际上,它几乎总是一个 RecyclerView

参数int viewType 是告诉你你正在建立什么样的View。这取决于您是否重写适配器的 getItemViewType() 方法。如果您只有一种类型的 View ,则无需担心这一点。

对于 ViewHolder,这基本上是在布局中缓存不同类型的 View 。它们可以是 ImageViewTextView 等。它们将在用户滚动时不断“回收”,因此您不必总是创建它们。这样,您只需使用当前信息更新 View 。在这种情况下,只有一个 titlebindViewHolder 中传递的 ViewHolder 将是实际更新发生的地方。这一直被调用,因此无需在 onCreateViewHolder 中初始化 View 。只需要创建它们。

关于安卓| ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077451/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com