我需要ListView
在 Android 中创建一个具有标题并且是多行的。我用它来显示作业标题和它下面的截止日期。作业在两个标题下排序:“即将到来的作业”和“过去的作业”(当然,基于日期)。
我的标题工作正常,作业标题显示正确,但我不知道如何将第二行合并到列表中。
这是我的代码:
ListCourseAssignments.java
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
final SeparatedListAdapter adapter;
setContentView(R.layout.courseassignmentslistview);
adapter = new SeparatedListAdapter(getContext());
ArrayAdapter<String> upcomingList = new ArrayAdapter<String>(getContext(), R.layout.list_item, Homework.getUpcomingDates()); // Homework.getUpcomingDates() Returns string array
ArrayAdapter<String> pastList = new ArrayAdapter<String>(getContext(), R.layout.list_item, Homework.getPastDates()); // Homework.getPastDates() Returns string array
adapter.addSection("Upcoming Assignments", upcomingList);
adapter.addSection("Past Assignments", pastList);
ListView lv = (ListView) findViewById(android.R.id.list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long duration){
String item = (String) adapter.getItem(position);
Toast.makeText(getApplicationContext(), item, Toast.LENGTH_SHORT).show();
}
});
}
分离列表适配器.java
public class SeparatedListAdapter extends BaseAdapter {
public final Map<String, Adapter> sections = new LinkedHashMap<String, Adapter>();
public final ArrayAdapter<String> headers;
public SeparatedListAdapter(Context context) {
headers = new ArrayAdapter<String>(context, R.layout.courseassignmentslistview_header);
}
public void addSection(String section, Adapter adapter) {
this.headers.add(section);
this.sections.put(section, adapter);
}
public Object getItem(int position) {
for (Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
if (position == 0) return section;
if (position < size) return adapter.getItem(position - 1);
position -= size;
}
return null;
}
public int getCount() {
int total = 0;
for (Adapter adapter : this.sections.values()) total += adapter.getCount() + 1;
return total;
}
@Override
public int getViewTypeCount() {
int total = 1;
for (Adapter adapter : this.sections.values()) total += adapter.getViewTypeCount();
return total;
}
@Override
public int getItemViewType(int position) {
int type = 1;
for (Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
if (position == 0) return 0;
if (position < size) return type + adapter.getItemViewType(position - 1);
position -= size;
type += adapter.getViewTypeCount();
}
return -1;
}
public boolean areAllItemsSelectable() {
return false;
}
@Override
public boolean isEnabled(int position) {
return (getItemViewType(position) != 0);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int sectionnum = 0;
for (Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
if (position == 0) return headers.getView(sectionnum, convertView, parent);
if (position < size) return adapter.getView(position - 1, convertView, parent);
position -= size;
sectionnum++;
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
}
courseassignmentslistview_header.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_header_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="2dip"
android:paddingBottom="2dip"
android:paddingLeft="5dip"
style="?android:attr/listSeparatorTextViewStyle" />
courseassignmentslistview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:id="@+android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
列表项.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
编辑:我知道如何使用多行创建一个列表,但我只是不知道如何将它与带有标题的列表(例如这个)放在一起......