ListView
ヘッダーがあり、複数行のAndroidでを作成する必要があります。これを使用して、課題のタイトルとその下の期日を表示します。割り当ては、「今後の割り当て」と「過去の割り当て」の2つのヘッダーに分類されます(もちろん、日付に基づきます)。
ヘッダーが機能し、割り当てのタイトルが正しく表示されていますが、リストに2行目を組み込む方法に困惑しています。
これが私のコードです:
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();
}
});
}
SeparatedListAdapter.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>
listitem.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>
編集:複数行のリストを作成する方法は知っていますが、ヘッダー付きのリスト(このような)と一緒にリストを作成する方法がわかりません...