- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个能够在屏幕上显示最多 3 个项目的 recyclerView,但它会同时为列表中的所有 45 个项目调用 onCreateViewHolder 和 onBindViewHolder(如下面的日志所示)。
它不应该只在我将这些项目滚动到屏幕时调用这些方法吗?
*我使用一个包含 0 和 1 的列表作为测试来定义它应该使用哪种布局。
我的适配器代码
public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
int[] post_list;
private static final int TYPE_0 =0;
private static final int TYPE_1=1;
private LayoutInflater inflater;
private Context context;
Activity mActivity;
public MyRecyclerAdapter(Context context, int[] list, Activity mActivity){
this.context=context;
inflater=LayoutInflater.from(context);
this.list=list;
this.mActivity = mActivity;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.e("onCreateViewHolder", "CALLED");
if(viewType== TYPE_0){
View view=inflater.inflate(R.layout.layout_type0, parent,false);
Type0Holder holder=new Type0Holder(view);
return holder;
}
else{
View view=inflater.inflate(R.layout.layout_type1, parent,false);
Type1Holder holder=new Type1Holder (view);
return holder;
}
}
@Override
public int getItemViewType(int position) {
if(list[position]==0) {
return TYPE_0;
}
else {
return TYPE_1;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof Type0Holder){
Type0Holder type0Holder = (Type0Holder) holder;
type0Holder .mTextView.setText("Layout type 0");
Glide.with(mActivity.getApplicationContext()).load(R.drawable.imageTest).into(type0Holder.mImageView);
}
else{
Type1Holder type1Holder = (Type1Holder ) holder;
type1Holder .mTextView.setText("Layout type 1");
Glide.with(mActivity.getApplicationContext()).load(R.drawable.imageTest).into(type1Holder.mImageView);
}
Log.e("onBindViewHolder", String.valueOf(position));
}
@Override
public int getItemCount() {
return post_list.length;
}
class Type0Holder extends RecyclerView.ViewHolder {
TextView mTextView;
ImageView mImageView;
public Type0Holder (View view) {
super(view);
mTextView= (TextView) itemView.findViewById(R.id.text_view0);
mImageView= (ImageView) itemView.findViewById(R.id.image_view0);
}
}
class Type1Holder extends RecyclerView.ViewHolder {
TextView mTextView;
ImageView mImageView;
public ImagePostHolder(View itemView) {
super(itemView);
mTextView= (TextView) itemView.findViewById(R.id.text_view1);
mImageView= (ImageView) itemView.findViewById(R.id.image_view1);
}
}
我的回收站 xml
<android.support.v4.widget.NestedScrollView
android:id="@+id/nested_scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:fillViewport="true"
android:paddingBottom="3dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:orientation="vertical"
android:clipToPadding="false">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
我的日志显示它正在一次调用所有项目,甚至是那些不可见的项目。
10-23 15:15:46.093 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.113 28766-28766/com.example..E/HOLDER: 0
10-23 15:15:46.113 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.113 28766-28766/com.example..E/HOLDER: 1
10-23 15:15:46.113 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.123 28766-28766/com.example..E/HOLDER: 2
10-23 15:15:46.123 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.123 28766-28766/com.example..E/HOLDER: 3
10-23 15:15:46.123 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.133 28766-28766/com.example..E/HOLDER: 4
10-23 15:15:46.133 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.133 28766-28766/com.example..E/HOLDER: 5
10-23 15:15:46.143 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.143 28766-28766/com.example..E/HOLDER: 6
10-23 15:15:46.143 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.143 28766-28766/com.example..E/HOLDER: 7
10-23 15:15:46.153 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.153 28766-28766/com.example..E/HOLDER: 8
10-23 15:15:46.153 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.153 28766-28766/com.example..E/HOLDER: 9
10-23 15:15:46.163 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.163 28766-28766/com.example..E/HOLDER: 10
10-23 15:15:46.163 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.163 28766-28766/com.example..E/HOLDER: 11
10-23 15:15:46.173 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.173 28766-28766/com.example..E/HOLDER: 12
10-23 15:15:46.173 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 13
10-23 15:15:46.183 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 14
10-23 15:15:46.183 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.183 28766-28766/com.example..E/HOLDER: 15
10-23 15:15:46.193 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.193 28766-28766/com.example..E/HOLDER: 16
10-23 15:15:46.193 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.193 28766-28766/com.example..E/HOLDER: 17
10-23 15:15:46.203 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.203 28766-28766/com.example..E/HOLDER: 18
10-23 15:15:46.203 28766-28766/com.example..E/CREATE HOLDER: CALLED
10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 19
10-23 15:15:46.213 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 20
10-23 15:15:46.213 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.213 28766-28766/com.example.. E/HOLDER: 21
10-23 15:15:46.223 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.223 28766-28766/com.example.. E/HOLDER: 22
10-23 15:15:46.223 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 23
10-23 15:15:46.233 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 24
10-23 15:15:46.233 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.233 28766-28766/com.example.. E/HOLDER: 25
10-23 15:15:46.243 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.243 28766-28766/com.example.. E/HOLDER: 26
10-23 15:15:46.243 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.243 28766-28766/com.example.. E/HOLDER: 27
10-23 15:15:46.253 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.253 28766-28766/com.example.. E/HOLDER: 28
10-23 15:15:46.253 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.253 28766-28766/com.example.. E/HOLDER: 29
10-23 15:15:46.263 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.263 28766-28766/com.example.. E/HOLDER: 30
10-23 15:15:46.263 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.263 28766-28766/com.example.. E/HOLDER: 31
10-23 15:15:46.273 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.283 28766-28766/com.example.. E/HOLDER: 32
10-23 15:15:46.283 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.283 28766-28766/com.example.. E/HOLDER: 33
10-23 15:15:46.293 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.313 28766-28766/com.example.. E/HOLDER: 34
10-23 15:15:46.313 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.323 28766-28766/com.example.. E/HOLDER: 35
10-23 15:15:46.323 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.323 28766-28766/com.example.. E/HOLDER: 36
10-23 15:15:46.333 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.333 28766-28766/com.example.. E/HOLDER: 37
10-23 15:15:46.333 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.343 28766-28766/com.example.. E/HOLDER: 38
10-23 15:15:46.343 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.343 28766-28766/com.example.. E/HOLDER: 39
10-23 15:15:46.343 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.353 28766-28766/com.example.. E/HOLDER: 40
10-23 15:15:46.353 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.353 28766-28766/com.example.. E/HOLDER: 41
10-23 15:15:46.353 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.363 28766-28766/com.example.. E/HOLDER: 42
10-23 15:15:46.363 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.363 28766-28766/com.example.. E/HOLDER: 43
10-23 15:15:46.373 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.373 28766-28766/com.example.. E/HOLDER: 44
10-23 15:15:46.373 28766-28766/com.example.. E/CREATE HOLDER: CALLED
10-23 15:15:46.383 28766-28766/com.example.. E/HOLDER: 45
更新 1 - 我发现我的 recyclerView 不回收的原因是因为它在 NestedScrowView 内,那么即使它在 NestedScrowView 内,我如何让它回收 View ?
最佳答案
我遇到了同样的问题。在我的例子中,NestedScrollView
是 Bottom Sheet 的根,我用 FrameLayout
替换了它,它起作用了。
如果可以,您应该尝试使用 FrameLayout
关于android - RecyclerView 一次为所有项目调用 onCreateViewHolder 和 onBindViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206040/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!