使用ArrayAdapter在listView中添加标头

abc*_*abc 4 android listview

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

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);
Run Code Online (Sandbox Code Playgroud)

现在我想使用标题对它们进行分类.我试图添加另一个数组适配器.但它对标题不起作用.

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);
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这个工作?

PS:我正在使用片段.

use*_*372 9

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

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

每个名字首字母的人员和部分的适配器示例:

- A (SectionItem)
- Adam (Person)
- Alex (Person)
- Andre (Person)
- B (SectionItem)
- Ben (Person)
- Boris (Person)
...
Run Code Online (Sandbox Code Playgroud)

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)