- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有带部分的列表,但是这个 ListView 很慢。
我需要任何支架,但我不知道怎么做。
当我只有一种 View 时很简单,但在这里我遇到了问题。
我创建了 holder,但是当 ListView 显示时,我看到:
"标题","标题","标题","项目","项目"
"标题","标题","标题","项目"
"标题","标题","标题","项目","项目","项目"
这是我的代码:
public class EntryAdapter extends ArrayAdapter<Item> {
private ArrayList<Item> items;
private LayoutInflater vi;
Context context;
private String nazwa;
public EntryAdapter(Context context,ArrayList<Item> items, String nazwa) {
super(context,0, items);
this.items = items;
this.context = context;
this.nazwa = nazwa;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
然后我得到 View :
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Item i = items.get(position);
if (i != null) {
if(i.isSection()){
SectionItem si = (SectionItem)i;
convertView = vi.inflate(R.layout.list_item_section, null);
convertView.setOnClickListener(null);
convertView.setOnLongClickListener(null);
convertView.setLongClickable(false);
final TextView sectionView = (TextView) convertView.findViewById(R.id.list_item_section_text);
}else{
Obiekt ei = (Obiekt)i;
convertView = vi.inflate(R.layout.row_list, null);
final TextView title = (TextView)convertView.findViewById(R.id.row_tytul);
final TextView odleglosc = (TextView)convertView.findViewById(R.id.row_odleglosc);
final ImageView obrazek = (ImageView)convertView.findViewById(R.id.row_ikona_mala);
final LinearLayout pole = (LinearLayout)convertView.findViewById(R.id.LinearLayout1);
}
}
return convertView;
}
最佳答案
I have list with section, but this ListView is very slow.
您总是在 getView() 方法中扩充新 View 。膨胀 View 通常需要很长时间。
您想通过检查“convertView”是否为 null 来重新使用以前的 View 。这将提高性能。注意,您还必须实现 getItemViewType()
和 getViewTypeCount()
,因为您有两个不同的 View :
public class MyAdapter extends ArrayAdapter<Item> {
private List<Item> items;
private int TYPE_SECTION = 0;
private int TYPE_OBIEKT = 1;
private static LayoutInflater vi;
public MyAdapter(Context context, List<Item> _items) {
super(context, 0);
vi = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
items = _items;
}
@Override
public int getCount() {
return items.size();
}
/**
* @see android.widget.BaseAdapter#getViewTypeCount()
* Determines how many different views you have
*/
@Override
public int getViewTypeCount() {
return 2; // We have two different kinds of views
}
/**
* @see android.widget.BaseAdapter#getItemViewType(int)
*/
@Override
public int getItemViewType(int position) {
Item item = items.get(position);
if (item.isSection())
return TYPE_SECTION;
return TYPE_OBIEKT;
}
/**
* @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the item
final Item item = items.get(position);
if (getItemViewType(position) == TYPE_SECTION) {
// Return a SectionView object
return getSectionView(position, convertView, parent, (SectionItem) item);
}
// Return an Obiekt object
return getObiektView(position, convertView, parent, (Obiekt) item);
}
/**
* SectionView specific
*
* @param position
* @param convertView
* @param parent
* @param item
* @return
*/
public View getSectionView(int position, View convertView, ViewGroup parent, SectionItem item) {
SectionHolder holder;
if(convertView == null){
holder = new SectionHolder();
// Inflate a new View
convertView = vi.inflate(R.layout.list_item_section, null);
holder.sectionView = (TextView) convertView.findViewById(R.id.list_item_section_text);
// Set the ObiektHolder as the tag, to retrieve it for re-using
convertView.setTag(holder);
} else {
holder = (SectionHolder) convertView.getTag();
}
// Holder is never null here
holder.sectionView.setText(item.getSectionTitle());
return convertView;
}
public View getObiektView(int position, View convertView, ViewGroup parent, Obiekt item) {
ObiektHolder holder;
if(convertView == null){
holder = new ObiektHolder();
// Inflate a new View
convertView = vi.inflate(R.layout.row_list, null);
holder.title = (TextView)convertView.findViewById(R.id.row_tytul);
holder.odleglosc = (TextView)convertView.findViewById(R.id.row_odleglosc);
holder.obrazek = (ImageView)convertView.findViewById(R.id.row_ikona_mala);
holder.pole = (LinearLayout)convertView.findViewById(R.id.LinearLayout1);
// Set the ObiektHolder as the tag, to retrieve it for re-using
convertView.setTag(holder);
} else {
holder = (ObiektHolder) convertView.getTag();
}
// Holder is never null here
holder.title.setText(item.getObiektTitle());
return convertView;
}
private static class SectionHolder {
TextView sectionView;
}
private static class ObiektHolder {
TextView title;
TextView odleglosc;
ImageView obrazek;
LinearLayout pole;
}
}
注意:已经过测试,现在可以使用了!
关于Android SectionList 和 Holder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497847/
我有一个画廊,每个元素都有 .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
我是一名优秀的程序员,十分优秀!