如何在ListView中添加多个标题视图

Har*_*rsh 6 android android-listview

我有一个自定义适配器,我ListView想将项目名称添加为工作请求的标题.添加单个标头工作正常,但我不知道如何使用添加多个标头addHeaderView.我不明白到底要放在哪里setAdapter或者它应该多次放置?

这是我的单个标头的java代码,它有效:

mListView = (ListView)findViewById(R.id.dashboardList);
View header1 =  getLayoutInflater().inflate(R.layout.listview_header, null, false);
tv = (TextView) header1.findViewById(R.id.listHeader);
adapter = new MyCustomAdapter(MyDashboardActivity.this, R.layout.mydashboard_row, dashboardBean);
tv.setText("Project 1");
mListView.addHeaderView(header1, null, false);
for (int i=0; i < 7; i++) {
     dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i]));
}
mListView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

现在,我尝试了两个标题:

mListView = (ListView)findViewById(R.id.dashboardList);
View header1 =  getLayoutInflater().inflate(R.layout.listview_header, null, false);
tv = (TextView) header1.findViewById(R.id.listHeader);
adapter = new MyCustomAdapter(MyDashboardActivity.this, R.layout.mydashboard_row, dashboardBean);
tv.setText("RxOffice");
mListView.addHeaderView(header1, null, false);
for (int i=0; i < 4; i++) {
     dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i])); 
}

tv.setText(Project 2");

mListView.addHeaderView(header1, null, false);
for (int i=4; i < workRequests.length; i++) {
     dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i]));
}
mListView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

但这不起作用!它只给我Project 2标题和它下面的所有7个条目.谁能告诉我有什么问题?我猜这与它有关setAdapter.谢谢!

Bar*_*rak 11

我不认为你想做的事情可能就像你想要做的那样.当你使用addHeaderView它包装你ListAdapterHeaderViewListAdapter.我在这里查看了文档,这似乎暗示你可以有多个标题,但它们都会在顶部(duh,header).

这听起来像你真正想要的是分离器......

您可以使用CommonWare的MergeAdapter.它将允许您插入适配器和视图(以您希望的任何顺序),并将它们作为单个适配器呈现给列表视图.您只需为每个内容部分提供标题和适配器,然后将其设置为列表.

伪代码示例:

myMergeAdapter = new MergeAdapter(); 
myMergeAdapter.addView(HeaderView1); 
myMergeAdapter.addAdapter(listAdapter1); 
myMergeAdapter.addView(HeaderView2); 
myMergeAdapter.addAdapter(listAdapter2); 
setListAdapter(myMergeAdapter); 
Run Code Online (Sandbox Code Playgroud)