我有一个ListView与不同的项目不同的布局.有些项目是分隔符.有些项目不同,因为它们包含不同类型的数据等.
我想实现ViewHolders来加速getView进程,但我不太清楚如何去做.不同的布局具有不同的数据(这使得命名困难)和我想要使用的不同数量的视图.
我应该怎么做呢?
我能想出的最好的想法是创建一个带X项的通用ViewHolder,其中X是项目布局中具有最多数量的视图数.对于具有少量视图的其他视图,我将在ViewHolder中使用这些变量的子部分.所以说我有2个布局我用于2个不同的项目.一个有3个TextViews,另一个有1.我会创建一个带有3个TextView变量的ViewHolder,并且只使用其中一个用于我的其他项目.我的问题是,这可能会变得非常难看,感觉非常黑客; 特别是当项目布局可能有许多不同类型的视图时.
这是一个非常基本的getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder holder;
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_mylistlist_item, parent, false);
holder = new MyHolder();
holder.text = (TextView) v.findViewById(R.id.mylist_itemname);
v.setTag(holder);
}
else {
holder = (MyHolder)v.getTag();
}
MyListItem myItem = m_items.get(position);
// set up the list item
if (myItem != null) {
// set item text
if (holder.text != null) {
holder.text.setText(myItem.getItemName());
}
}
// …Run Code Online (Sandbox Code Playgroud)