相关疑难解决方法(0)

使用不同的项目布局为ListView创建ViewHolders

我有一个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)

android listview listactivity

49
推荐指数
1
解决办法
4万
查看次数

标签 统计

android ×1

listactivity ×1

listview ×1