- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
通常适配器会用这个来优化 ListView 的性能:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}
View 持有者是:
public static class ViewHolder {
public TextView textView;
}
但是如果我有不同类型的行,比如 1 行带有 ImabeView,1 行带有 CheckBox,1 行带有 EditText
第一件事是:
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
//if something
return 0
//if something else
return 1
//if something different
return 2
}
并在 getView() 中;
getView(int position, View convertView, ViewGroup parent){
//if convetView == null, getItemViewType(position) and depending on the type inflate respective layout
convertView.setTag(holder);
//else
holder = (ViewHolder)convertView.getTag();
}
但是 ViewHolders 呢,我应该有 3 个不同的 ViewHolders 并根据类型.......setTag 为各自的 Holder 吗?
我可以找到任何类似这样的例子。实际上我还没有看到 anu ListView 使用超过 1 个 ViewHolder。
我这样做的方式正确吗??
谢谢
最佳答案
没有什么可以阻止您在单个 ViewHolder
类中声明来自所有 ListView
布局的所有可能 View (因此 ViewHolder
将保存对示例中的 ImageView
、CheckBox
和 EditText
的引用)。
在 getView
方法中,当 convertView
为 null
时,您将仅在 ViewHolder
中设置 View 该类型的行,ViewHolder
中的所有其他 View 引用都将为 null
。当需要使用 ViewHolder
中的 View 时,只需查看您使用的是哪种类型的行,并仅从属于该行的 ViewHolder
中获取 View 。
您还可以为每种类型的行使用三个 ViewHolder
类(并在膨胀时为每个特定行设置它们),但我认为第一个版本更好。最后,只要您正确实现多行类型机制,您就可以采取任何一种方式。
关于android - ListView 中有不同行时如何使用 View Holder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195624/
我有一个画廊,每个元素都有 .item 类。在 .item 中总有一个删除它的链接: Title of item remove 当您按下一个 .item 时,它会显示一个红色边框 div.item:a
一 点睛 Hold 方式的单例完全是借助了类加载的特点。 二 代码 package singleton.singleton3; // final 不允许继承 public final class S
所以,这是我的项目结构。这只是一个两个选项卡的应用程序。 左侧选项卡上有所有可用项目的列表。在右侧选项卡上,有用户最喜欢的项目的列表。每个项目都有一个按钮,单击该按钮,该项目就会成为 Collecti
我正在使用 jBullet 和 OpenGL 来创建一个基本的游戏引擎。我创建了两个名为 ObjectSurface 和 ObjectEntity 的类。基本上,ObjectSurface 没有质量,
我正在开发具有自定义布局 和arrayAdapter 的应用。我的自定义布局由 1 个 ImageView、2 个 textView 和 1 个复选框组成。 Booth 的图像文件和文本存储在 val
我正在实现一个模板类“Holder”,稍后应该专门用于包含不同类的对象。 Holder 将对象存储为属性。当在构造函数中存储需要参数的对象时,holder 类在实例化时失败: #include te
我有带部分的列表,但是这个 ListView 很慢。 我需要任何支架,但我不知道怎么做。 当我只有一种 View 时很简单,但在这里我遇到了问题。 我创建了 holder,但是当 ListView 显
在我的应用程序中,我有几种holder 对象,其主要目的是存储异构相关数据。它们的生命周期可以分为两部分: 一旦可用就收集数据; 在持有人的余生中提供对存储数据的只读访问权限。 使持有者不可变是非常诱
我正在将数据上传到服务器,如果数据成功上传到服务器,那么我会显示“已保存”,就像您可以看到图像“已上传”一样。 但问题是,我已经为第一个项目行存储了数据,而在不同的行项目中获取“已保存”文本 hold
我有一个杂乱的树形多维数组,我想执行以下操作: 提取每个数组,无论嵌套多远以将其放入单个“holder 数组”,所以这(只是一个基本示例,因为就嵌套而言它会比这复杂得多) $this = array[
我有两个版本的“Initialization-on-demand holder idiom”: http://en.wikipedia.org/wiki/Initialization-on-deman
我正在开发自定义相机应用程序。下面是我的 Activity 类。 public class MyCustomCam extends Activity { private Camera mCamera;
我对 ListView 有问题,或者更准确地说 - 放置在其上的 ImageView。我的应用正在从 Youtube 下载缩略图。到那个地方的一切都很好。后来,在使用 getView() 时出现了一个
使用 CSS,如何根据下图创建部分边框 我可以获得完整的边框: border: 1px solid #f5f5f5; 但只想在垂直边框的顶部和底部显示 30px,中间没有任何东西? 这能实现吗? 一如
以下代码将 Holder 指定为 interface 类型。 可以对 Holder 对象进行哪些更改,以便它接收具有引用类型的任何类型,因此如果对值对象进行任何更改,它会反射(reflect)在 ma
我正在开发一个具有自定义布局和 arrayAdapter 的应用: 问题是当我选中一个框时,应用程序会自动选中另外2个框! 我创建了一个列表,在其中放置了复选框的位置,并表明没有任何问题!我认为问题出
我有一个非常简单的单例,它使用持有者模式(我只显示了模式,没有其他细节): public class Foo { private static class FooHolder {
我一直在尝试使用 jQuery 构建一个简单的照片库。这是我到目前为止所得到的。这工作正常,但问题是照片没有垂直居中显示在屏幕上。 这是我正在处理的片段。如果您全屏运行代码片段,图像会停留在顶部。如何
我试图理解并完成尝试创建一个类的任务,该类扩展了一个接受所有类型类的通用类。到目前为止,我有这个工作。我正在尝试创建一个扩展通用持有人类的类,并让这个类只接受特定的对象。 例如,名为“Computer
这是网络上最常见的实现方式 private static class LazySomethingHolder { public static Something something = new S
我是一名优秀的程序员,十分优秀!