如何使用多个布局优化列表视图

时间:2016-02-09 13:24:08

标签: android

我正在尝试确定让单个列表视图包含不同行样式的最佳方法。我知道如何创建自定义行+自定义数组适配器以支持整个列表视图的自定义行。但是listview如何支持许多不同的行样式?

3 个答案:

答案 0 :(得分:0)

只需创建一个属性和myListView.addView('你的膨胀视图')

LayoutInflater inflater = LayoutInflater.from(this);
RelativeView myCustomView =(RelativeView)inflater.inflate(R.layout.task_since_user);
myListView.addView(myCustomView);

答案 1 :(得分:0)

既然你知道有多少种布局 - 可以使用这些方法。

getViewTypeCount() - 此方法返回信息列表中有多少行类型

getItemViewType(int position) - 返回基于位置

应使用的布局类型的信息

然后,只有在布局为空时才会使布局膨胀,并使用getItemViewType确定类型。

请查看this tutorial以获取更多信息。

为了实现您在评论中描述的结构优化,我建议:

  • 在名为ViewHolder的对象中存储视图。它会提高速度,因为你不必每次都在getView方法中调用findViewById()。见List14 in API demos
  • 创建一个符合所有属性组合的通用布局,如果当前位置没有,则隐藏一些元素。

我希望这会对你有所帮助。如果您可以提供一些XML存根以及您的数据结构和信息,您希望如何将其映射到行中,我将能够为您提供更精确的建议。按像素。

答案 2 :(得分:0)

你必须写自定义适配器,扩展BasaAdapter。注意:viewTypeCount()。然后您可以使用条件来检查和分配不同的视图

private class MyAdapter extends BaseAdapter{
public static final int ITEM_TYPE_ONE = 1;
public static final int ITEM_TYPE_TWO = 2;
@Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return (position % 2 == 0) ? ITEM_TYPE_ONE : ITEM_TYPE_TWO;
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int itemTypeId = getItemViewType(position);

        if (convertView == null) {
            if (itemTypeId == ITEM_TYPE_ONE) {
                convertView = inflater.inflate(R.layout.layout_one, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.layout_two, parent, false);
            }
        }
}

}