gpt4 book ai didi

android - 如何使用 addHeaderView() 在单个 ListView 中添加多个标题?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:53 24 4
gpt4 key购买 nike

Android 的 addHeaderView() 能否用于在单个 ListView 中添加多个标题?有人可以举例说明如何执行此操作吗?

我能够通过操纵 IconicAdapter 类来完成我想要的事情……我有什么理由不应该这样做吗?我觉得这可以修改为更高级的实现。就我而言,我知道我将有两个部分,每个部分有一个标题 + 2 行。

class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
super(ContactTabProfileResource.this, R.layout.row_iconic, mArrayList);
}


public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = getLayoutInflater();
View row = null;

if(position == 1 || position == 5) { // phone
row = inflater.inflate(R.layout.row_iconic, parent, false);
TextView label =(TextView)row.findViewById(R.id.label);
label.setText(mArrayList.get(position));
ImageView icon = (ImageView)row.findViewById(R.id.rowicon);
icon.setImageResource(R.drawable.icon_phone);
} else if (position == 2 || position == 6) { // email
row = inflater.inflate(R.layout.row_iconic, parent, false);
TextView label =(TextView)row.findViewById(R.id.label);
label.setText(mArrayList.get(position));
ImageView icon = (ImageView)row.findViewById(R.id.rowicon);
icon.setImageResource(R.drawable.icon_email);
} else if (position == 0 || position == 4) { // section header
row = inflater.inflate(R.layout.row_header, parent, false);
TextView label =(TextView)row.findViewById(R.id.label);
label.setText(mArrayList.get(position));
label.setBackgroundColor(Color.GRAY);
} else if (position == 3) { // section divider
row = inflater.inflate(R.layout.row_header, parent, false);
TextView label =(TextView)row.findViewById(R.id.label);
label.setText(" ");
}

return(row);

}
}

然后我创建了两个不同的 XML 布局。 row_header.xml 用于标题行,row_iconic.xml 用于非标题行,其中包含一个图标。

row_header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right"
>

<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:paddingLeft="10px"
android:gravity="left"
android:textStyle="bold"
/>
</LinearLayout>

行图标.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right"
>

<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:paddingLeft="44px"
/>
<ImageView
android:id="@+id/rowicon"
android:layout_width="40dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:layout_height="30dp"
android:src="@drawable/icon"
/>
</LinearLayout>

最佳答案

Android 开发人员可能会调用列表分隔符或副标题(“页眉”和“页脚”仅位于列表的顶部或底部)。你如何做到这一点的要点是使用一个 ListAdapter,它包装了其他 ListAdapter 并且足够聪明,可以返回特定行的标题 View 类型并跟踪偏移量,或者将这些分隔符 View 包装在它们自己的迷你适配器中。

看看马克墨菲的 SectionedListAdapter , GPL,采用第一种方法(基于 Jeff Sharkey 的代码),或他的 MergeAdapter ,并查看 this SO question .

这与 iPhone 上智能列表子标题的优雅处理相差甚远,但使用 MergeAdapter 相当简单,而且一旦您完全了解适配器内部发生的事情就非常灵活。

关于android - 如何使用 addHeaderView() 在单个 ListView 中添加多个标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com