- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在试验 ReyclerView
,我正在尝试创建一个适配器,以便我可以在整个应用程序中使用它。这是我的适配器:
public class RecyclerViewAdapter extends BaseRecyclerAdapter<ItemView, RecyclerView.ViewHolder> {
public RecyclerViewAdapter(Context context) {
super(context, new ArrayList<ItemView>());
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
int viewType = getItem(position).getLayoutId();
View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
return getItem(position).getViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
getItem(position).bindViews();
}
@Override
public int getItemViewType(int position) {
return position;
}
}
BaseRecyclerAdapter
是一个标准的适配器,用于保存项目,并具有添加、删除...的标准功能
ItemView
看起来像这样:
public abstract class ItemView {
public abstract int getLayoutId();
public abstract RecyclerView.ViewHolder getViewHolder(View view);
public abstract void bindViews();
}
现在我可以创建扩展 ItemView 的项目,并且我可以将此适配器用于不同的项目。
问题是,在这种情况下返回 getItemViewType 中的位置是否安全?或者 recyclerView 会创建新的 View 而不回收已经创建的 View ?
最佳答案
The question is, is it safe to return position in getItemViewType in this case? Or the recyclerView will create new views and will not recycle already created?
不,从 getItemViewType()
返回位置并不“安全”,您的怀疑是正确的:因为 View
类型表明是否有一个现有的 View
可以为需要相同 View
类型的新数据项回收,每个项目都有其唯一的 View
类型的方法将完全阻止回收查看
。
在documentation for getItemViewType()
, 它说
Consider using id resources to uniquely identify item view types
也许这对你来说是个好主意:你已经在 onCreateViewHolder()
int viewType = getItem(position).getLayoutId();
所以你可以将它移动到 getItemViewType()
@Override
public int getItemViewType(int position) {
return getItem(position).getLayoutId();
}
和onCreateViewHolder()
看起来像这样
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewTypeResourceId) {
View view = LayoutInflater.from(parent.getContext()).inflate(viewTypeResourceId, parent, false);
return getItem(viewTypeResourceId).getViewHolder(view);
}
请注意,我将 getItem()
的参数从 position 更改为 viewTypeResourceId 因为您只有一个 position 在 onBindViewHolder()
中。有一些 Unresolved 问题,但我认为您的方法仍然可行,您只需要提供位置到布局资源 ID 的映射以及布局资源 ID(也称为 View 类型)到特定类型 ViewHolder 的映射(并且您始终可以通过调用 getItemViewType()
获取给定位置的 View
类型)
关于android - RecyclerView 在 getItemViewType 方法中返回位置,因此它可以在 onCreateViewHolder 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785185/
我有一个异构的回收器 View 适配器,它根据提要项目的类型显示不同的 View 。 除了它们的布局 XML 之外,这些 View 类型之间的唯一区别是数据库中名为 notificationType
我有一个 ListView,它很复杂,因为可能存在 4 种 View 类型的场景,例如{ 书籍、电影、音乐 CD、音乐会 } 目前,为了决定膨胀什么对象等,我得到了与列表行相关的项目。然后,我将在对象
ExpandableListAdapter 是否支持 BaseAdapter 覆盖 getItemViewType 和 getViewTypeCount 的任何功能,我可以在其中创建各种 View 类
我有一个 RecyclerView 适配器,它负责处理我多年来一直使用的几种 View 类型。最近,我发现了 ConcatAdapter,但我似乎遇到了一个问题,它似乎为 getItemViewTyp
我想在 Android 中为聊天应用程序创建一个 ListView,如果用户键入文本,我想在 ListView 中显示文本布局,如果用户发送图像,我想显示图像布局,我设计了两个布局,如 sms_row
我有一个 RecyclerView 适配器和“getItemViewType”方法中的以下代码: if (position == 0) { return Post.PostTypeH
我想实现一个具有多种 View 类型的 RecyclerView。因此,我在适配器类中使用了 getItemViewType() 方法: @Override public int ge
使用不同布局填充 Android ListView 的推荐方法似乎是覆盖 getItemViewType(int position) 和 getViewTypeCount()。 这在此处的许多问题和答
我一直在研究 Commonsware Android Programming Tutorials,在教程 5 中,额外学分 2,挑战是根据对象的"typename"(餐厅的“type”属性,它是一个字
我正在使用 TMDB api、Retrofit、Gson 和 Glide 创建一个电影应用程序。我有两个 recyclerView 和两个要充气的布局。但我无法在 recyclerView 适配器中膨
因此,在有人责备我问一个已经问过的问题之前,我已经在这个站点上查找了一个关于如何使用方法 getItemViewType() 在 RecyclerView 中呈现不同列表项的解决方案。我正在尝试了解它
我们可以自定义RecyclerView的getItemViewType()为ReturnString吗?通常我们得到以下类型的 getItemViewType()。 @Override pu
我正在应用程序中构建聊天功能。用户发送的消息将显示在屏幕右侧,用户收到的消息将显示在屏幕左侧。所有聊天数据都存储在一个 pojo 中。在 FirebaseRecycler#getItemViewTyp
我有一个具有多种 View 类型的 View 。 滚动时 onBindViewHolder 仅在 getItemViewType 更改值时调用。这会导致我的列表项无法正确更新。 这是一个错误吗?或者我
我正在重写我项目中的 getItemViewType() 方法,以指示我的列表中的项目使用哪个 View ,R.layout.listview_item_product_complete 或 R.la
谁能简单地解释一下ArrayAdapter的getViewTypeCount()和getItemViewType()方法的用法? 最佳答案 这些处理您希望不同行的不同类型 View 的情况。例如,在联
我有一个 RecyclerView 适配器,它应该根据 getItemViewType 返回的内容膨胀 4 种不同的布局。 每个 View 类型都应该在 View 触发时返回,但问题是其中一种类型不会
我正在试验 ReyclerView,我正在尝试创建一个适配器,以便我可以在整个应用程序中使用它。这是我的适配器: public class RecyclerViewAdapter extends Ba
我有一个简单的 RecyclerView,它使用 ItemTouchHelper 滑动和拖动项目。一切正常,直到我需要对第一个和最后一个项目进行不同的样式设置,所以我需要重写适配器中的 getItem
我在 stackoverflow 中看到了类似的问题,但他们没有对我的问题给出明确的答案。在阅读我的完整问题之前,不要将其标记为重复。我看到了this链接 , this , 和 this也。感谢您花时
我是一名优秀的程序员,十分优秀!