Listview Section複数のタイトルおよびコンテンツ
13330 ワード
日付ヘッダー部分のビューレイアウト:
view sourceprint?1 <?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=”10dip” android:background=”@drawable/section_background”>
<TextView android:id=”@+id/section_title”
android:layout_width=”fill_parent” android:layout_height=”match_parent” />
</LinearLayout>
画像付きエントリレイアウト:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent” android:layout_height=”wrap_content”
android:orientation=”horizontal” >
<ImageView android:id=”@+id/image” android:src=”@drawable/p”
android:layout_width=”wrap_content” android:layout_height=”wrap_content” />
<TextView android:id=”@+id/title” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />
</LinearLayout>
問題は、ListViewにタイトルエントリとコンテンツエントリがある方法です.
ここでは,設計モードにおけるIteratorモードを用いた.JavaコードにはIteratorの例があり、ArrayList、HashSetなどの異なるデータ構造オブジェクトを反復することができます.
ListElementはインタフェースです.
package com.easymorse.listview.customer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
public interface ListElement {
public int getLayoutId();
public boolean isClickable();
public View getViewForListElement(LayoutInflater layoutInflater,
Context context, View view);
}
次のようになります.
このインタフェースには2つの実装があります.
SectionListElementコードを参照:
package com.easymorse.listview.customer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class SectionListElement implements ListElement {
private String text;
public void setText(String text) {
this.text = text;
}
@Override
public int getLayoutId() {
return R.layout.section;
}
@Override
public boolean isClickable() {
return false;
}
@Override
public View getViewForListElement(LayoutInflater layoutInflater,
Context context, View view) {
LinearLayout layout = (LinearLayout) layoutInflater.inflate(getLayoutId(), null);
TextView textView=(TextView) layout.findViewById(R.id.section_title);
textView.setText(text);
return layout;
}
}
ContentListElementコードを参照:
ListViewにはListAdapterの実装が必要です.ここではBaseAdapterを直接統合して実現する.ListViewに渡してリストを生成します.コード:
public class CustomerListAdapter extends BaseAdapter {
private Context context;
protected ArrayList<ListElement> resultList;
private LayoutInflater layoutInflater;
public CustomerListAdapter(Context context) {
super();
this.context = context;
this.layoutInflater = (LayoutInflater) context
.getSystemService(“layout_inflater”);
this.resultList = new ArrayList<ListElement>();
}
@Override
public int getCount() {
return this.resultList.size();
}
@Override
public Object getItem(int position) {
return this.resultList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
return this.resultList.get(position).getViewForListElement(
layoutInflater, context, view);
}
public void addList(List<ListElement> elements) {
this.resultList.addAll(elements);
}
@Override
public boolean isEnabled(int position) {
return this.resultList.get(position).isClickable();
}
public void addSectionHeaderItem(String text) {
SectionListElement element = new SectionListElement();
element.setText(text);
this.resultList.add(element);
}
}
ActivityでCustomerListAdapterを作成し、そのコードセクションを設定します.
CustomerListAdapter adapter = new CustomerListAdapter(this);
adapter.addSectionHeaderItem(“2002-3-1″);
ArrayList<ListElement> elements = new ArrayList<ListElement>();
for (int i = 0; i < 5; i++) {
ContentListElement element = new ContentListElement();
element.setTitle(“ ” + (i+1) + “ ”);
elements.add(element);
}
adapter.addList(elements);
adapter.addSectionHeaderItem(“2002-2-2″);
elements = new ArrayList<ListElement>();
for (int i = 0; i < 3; i++) {
ContentListElement element = new ContentListElement();
element.setTitle(“ ” + (i+1) + “ ”);
elements.add(element);
}
adapter.addList(elements);
this.setListAdapter(adapter);
ここでListActivityは、ListActivityを継承する2つのことに注意する必要があります.またlayoutでは
ListViewのidはシステムで持参する