私はAndroidが初めてで、これに対する答えが見つかりません。
次のアダプターがあります。
public class DailyDataAdapter extends ArrayAdapter<DailyData> {
private LayoutInflater layoutInflater;
private ArrayList<DailyData> dailyDatas;
private boolean isUserSavedSectionDefined = false;
private boolean isAutoSavedSectionDefined = false;
private int resourceId;
public DailyDataAdapter(Context context, int textViewResourceId,
ArrayList<DailyData> dailyDatas) {
super(context, textViewResourceId, dailyDatas);
this.layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.dailyDatas = dailyDatas;
this.resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View dailyDataRow = convertView;
DailyData dailyData = dailyDatas.get(position);
if (dailyDataRow == null) {
dailyDataRow = layoutInflater.inflate(resourceId, null);
if (!isUserSavedSectionDefined && dailyData.isUserSaved()) {
TextView section = (TextView) dailyDataRow
.findViewById(R.id.section);
section.setText(R.string.user_saved_path);
section.setVisibility(View.VISIBLE);
isUserSavedSectionDefined = true;
} else if (!isAutoSavedSectionDefined && !dailyData.isUserSaved()) {
TextView section = (TextView) dailyDataRow
.findViewById(R.id.section);
section.setText(R.string.auto_saved_path);
section.setVisibility(View.VISIBLE);
isAutoSavedSectionDefined = true;
}
TextView description = (TextView) dailyDataRow
.findViewById(R.id.description);
description.setText(dailyData.getDate());
}
return dailyDataRow;
}
@Override
public void add(DailyData newDailyData) {
dailyDatas.add(newDailyData);
}
@Override
public void addAll(Collection<? extends DailyData> newDailyDatas) {
dailyDatas.addAll(newDailyDatas);
}
@Override
public void insert(DailyData newDailyData, int index) {
dailyDatas.add(index, newDailyData);
}
@Override
public void remove(DailyData newDailyData) {
dailyDatas.remove(newDailyData);
}
@Override
public void clear() {
dailyDatas.clear();
}
}
次のレイアウトを膨らませます:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/section"
android:layout_width="fill_parent"
android:layout_height="20dp"
android:layout_marginLeft="50dp"
android:background="@drawable/listitem_section"
android:gravity="center"
android:textColor="@color/white"
android:visibility="gone"
android:textStyle="bold" />
<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_marginLeft="50dp"
android:background="@drawable/listitem_selector"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="@dimen/normal_text" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_marginLeft="50dp"
android:layout_height="1dp"
android:background="@color/orange" >
</LinearLayout>
さて、問題は、アダプターに関連付けられたリストのコンテンツを設定してから、情報を表示するふりをする listView に関連付けると、次のようにうまく機能することです。
//Step #1
ArrayList<Data> ald = new ArrayList<Data>();
Location l = new Location("test");
Data d = new Data(l);
ald.add(d);
DailyData dd = new DailyData(false);
DailyData dd2 = new DailyData(false);
dd.setDataList(ald);
dd2.setDataList(ald);
dailyDataList.add(dd);
dailyDataList.add(dd2);
//Step #2
arrayAdapter = new DailyDataAdapter(this, R.layout.dailydata_item, dailyDataList);
しかし、リストのコンテンツを設定する前にアダプターを listView に関連付けると (これは、開発中のアプリケーションのふりをした動作です)、何も表示されません。(ステップ 1 と 2 の切り替え)。追加するすべてのデータは、後でメソッドnotifyDataSetChangedを呼び出して作成されます。