- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 RecyclerView.Adapter,但我对它的方法 onCreateViewHolder
的工作有点困惑。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if(viewType==TYPE_ITEM) {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder vh = new ViewHolder(mView);
return vh;
} else {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_uncommon_item, viewGroup, false);
ViewHolderFooter vh = new ViewHolderFooter(mView);
return vh;
}
}
如果我的列表中有 10 个项目,那么对于每个项目都会调用此方法,每次都会创建一个新的 ViewHolder
当然每个 View 都会调用一次,但现在我的问题是当我们将 ListView
和 BaseAdapter
与它们一起使用时,我们将 ViewHolder
存储在标签中并使用它。我们不会为每个项目创建 ViewHolder
。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder mViewHolder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.layout_list_item, null);
mViewHolder = new MyViewHolder();
convertView.setTag(mViewHolder);
} else {
mViewHolder = (MyViewHolder) convertView.getTag();
}
mViewHolder.tvTitle = detail(convertView, R.id.tvTitle, myList.get(position).getTitle());
mViewHolder.tvDesc = detail(convertView, R.id.tvDesc, myList.get(position).getDescription());
mViewHolder.ivIcon = detail(convertView, R.id.ivIcon, myList.get(position).getImgResId());
return convertView;
}
那么我们不是在创建额外的 viewholders 对象吗?请帮助我了解利弊。
谢谢
最佳答案
onCreateViewHolder
仅在没有 RecyclerView
可以重用的现有 View 持有者时创建新的 View 持有者。因此,例如,如果您的 RecyclerView
可以一次显示 5 个项目,它将创建 5-6 个 ViewHolders
,然后自动重用它们,每次调用 onBindViewHolder
。
它类似于您在 ListView
中的代码所做的(检查 convertView
是否为 null
,如果不是,则获取现有的 ViewHolder
来自标签),除了 RecyclerView
,这一切都是自动完成的。
我想这是使用 RecyclerView
的优点之一 - 您不必像使用 ListView 那样担心重用
。缺点是,ViewHolders
RecyclerView
非常可定制,但内置功能很少——不像 ListView
不是很可定制,但有很多内置功能。
关于Android RecyclerView.Adapter onCreateViewHolder() 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615400/
这个问题在这里已经有了答案: RecyclerView onCreateViewHolder Return Type Incompatibility With Multiple Custom Vie
我的 fragment public class PostFragment extends BaseFragment implements PostView { @Inject PostPresent
我正在关注 this tutorial ,据此,当我启动我的应用程序时,我应该能够看到已添加到 Firestore 的项目(文档)。但这正在发生 onCreateViewHolder仅当我点击 tex
我有一个 RecylerView 适配器,我在其中处理 onCreateViewHolder 方法中的 onClicks,但是我无法找到获取当前位置的方法。我当前的方法如下所示: @Overr
我在 NestedScrollView 中有一个 RecyclerView,它显示一些异步下载的数据。问题是在初始化项目时存在明显的滞后。经过一些测试后,我发现问题是每个项目都会调用 onCreate
我正在使用支持库 v7 将我的 ListView 转换为 RecyclerView。 我有 2 个不同的布局要加载到 RecyclerView 中。在 ListView 中,我在 getView()
我的RecyclerView没有调用onCreateViewHolder,所以onBindViewHolder在recyclerview中不会出现什么。我放了调试日志,没有显示日志。可以是什么? 我的
我有一个根 recyclerview,每个项目都填充了这个布局: 如您所见,每个项目中都有另一个recyclerview。我想用headers实现分段recycler
Recyclerview 不调用任何适配器方法:onBindViewHolder、onCreateViewHolder 因此适配器为空 这是我的代码: public class PostsFragme
我有 PagedListAdapater: class TrackedActivityAdapter constructor(diffUtilCallback: DiffUtil.ItemCallba
我尝试调试我的程序,发现执行没有在 FirebaseRecyclerAdapter recyclerAdapter=new FirebaseRecyclerAdapter( 选项)。我已经尝试了 st
我关注了this Google Developer 的 YouTube channel 的教程,用于实现 AdMob 原生快捷广告。 我收到以下错误: required: packagename.ad
我有一个 RecyclerView 可以将项目显示为列表、小网格或大网格,这可以在运行时更改。根据用户选择的样式,我在 onCreateViewHolder 中展开不同的布局。 我还使用 layout
我正在使用 RecyclerView.Adapter,但我对它的方法 onCreateViewHolder 的工作有点困惑。 @Override public RecyclerView.ViewH
到目前为止,我认为当我使用 adapter = new RecyclerViewAdapter(this, list) 调用适配器的构造函数时,调用了 RecyclerView.Adapter 中的
我的自定义适配器中的 onCreateViewHolder 函数出现了一个奇怪的异常。可能是因为 getItemViewType 函数按预期返回不同的值。 这是 getItemViewType 函数的
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 这应该是一个一如既往的简单工作。
短篇小说:我有一个(预缓存)自定义 LinearLayoutManager、RecyclerView、自定义 RecyclerView.Adaptor、自定义 RecyclerView.ViewHol
这是我的代码,我不知道为什么它现在不起作用 songs 是一个包含 getter setter 的简单 java 类 在从 JSON 获取数据之前,我尝试在 recycleView 中静态添加数据,并
我正在尝试制作 RecyclerView,但遇到了这个奇怪的错误。 消息如下: android.view.InflateException: Binary XML file line #0: Atte
我是一名优秀的程序员,十分优秀!