【问题标题】:Add headers in a listView using ArrayAdapter使用 ArrayAdapter 在 listView 中添加标题
【发布时间】:2014-08-03 07:19:26
【问题描述】:

我正在尝试使用数组适配器显示列表视图。我从数据库中获取数组。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
   android.R.layout.simple_list_item_1, ArrayofName);
ListView myListView = (ListView) ll.findViewById(R.id.list1);
myListView.setAdapter(adapter);

现在我想使用标题对它们进行分类。我试图添加另一个阵列适配器。但它不适用于标题。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, ArrayofName);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, ArrayofName);
ListView myListView = (ListView) ll.findViewById(R.id.list1);
myListView.addHeaderView(adapter1);
myListView.setAdapter(adapter);

我怎样才能让它工作?

PS:我正在使用片段。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    按照您希望显示的顺序对适配器中的项目进行排序,并在项目之间使用标题 (SectionItem)。

    创建一个 Person 类和一个 SectionItem 类。

    名称的第一个字母中包含人物和部分的适配器示例:

    - A (SectionItem)
    - Adam (Person)
    - Alex (Person)
    - Andre (Person)
    - B (SectionItem)
    - Ben (Person)
    - Boris (Person)
    ...
    

    在 adapter.getViewTypeCount 中返回 2。 在 adapter.getItemViewType(position) 中,为 SectionItems 返回 0,为 Persons 返回 1。 在 getView(...) 中返回 SectionItem 或 Person 的视图。

    例子:

    public class SectionedAdapter extends BaseAdapter {
    
        ....
    
        @Override
        public int getViewTypeCount() {
            return 2; // The number of distinct view types the getView() will return.
        }
    
        @Override
        public int getItemViewType(int position) {
            if (getItem(position) instanceof SectionItem){
                return 0;   
            }else{
                return 1;
            }
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Object item = getItem(position);
            if (item instanceof SectionItem) {
                if (convertView == null) {
                    convertView = getInflater().inflate(R.layout.section, null);
                }
                // Set the section details.
            } else if (item instanceof Person) {
                if (convertView == null) {
                    convertView = getInflater().inflate(R.layout.person, null);
                }
                // Set the person details.
            }
            return convertView;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您想添加标题(以复数形式)但您正在调用 mylistview.AddHeaderView(以单数形式)

      该方法接受显示在您的第一个项目“上方”的单个视图。您可以在运行时扩充资源或创建视图以将其添加到列表顶部。

      如果您想添加多个标题,例如在部分标题中,您必须创建一个自定义数组适配器,将它们插入到正确的位置。

      一个例子可以在这里找到How to add section separators / dividers to a ListView?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多