由于某些原因,我的自定义 ArrayAdapter 的 getView 没有被调用,并且 android 显示一个空列表。我已经在我的数据源类中插入了 cursor.getCount() 以确保我的查询不为空。
活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate called");
setContentView(R.layout.conference_list_layout);
Log.d(TAG, "create ConferenceDataSource");
datasource = new ConferenceDataSource(this);
Log.d(TAG, "open ConferenceDataSource");
datasource.open();
Log.d(TAG, "getAllUpcomingConferences");
List<Conference> conferences = datasource.getAllUpcomingConferences();
Log.d(TAG, "set ConferenceArrayAdapter");
setListAdapter(new ConferenceArrayAdapter(this, conferences));
}
数据源:
public List<Conference> getAllUpcomingConferences() {
Log.d(TAG, "getAllUpcomingConferences called");
List<Conference> conferences = new ArrayList<Conference>();
Cursor cursor = database.query(
DatabaseConstants.TABLE_CONFERENCES,
fields,
DatabaseConstants.CONFERENCE_START + ">" + (Calendar.getInstance()).getTimeInMillis(),
null,
null,
null,
null);
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
Conference conference = cursorToConference(cursor);
conferences.add(conference);
cursor.moveToNext();
}
cursor.close();
return conferences;
}
private Conference cursorToConference(Cursor cursor) {
Log.d(TAG, "cursorToConference called");
Conference conference = new Conference();
conference.setId(
cursor.getLong(cursor.getColumnIndex(DatabaseConstants.CONFERENCE_ID)));
conference.setStart(
cursor.getLong(cursor.getColumnIndex(DatabaseConstants.CONFERENCE_START)));
conference.setEnd(
cursor.getLong(cursor.getColumnIndex(DatabaseConstants.CONFERENCE_END)));
conference.setTopic(
cursor.getString(cursor.getColumnIndex(DatabaseConstants.CONFERENCE_TOPIC)));
conference.setCreator(
cursor.getLong(cursor.getColumnIndex(DatabaseConstants.CONFERENCE_CREATOR)));
return conference;
}
阵列适配器:
public ConferenceArrayAdapter(Context context, List<Conference> conferences) {
super(context, R.layout.conference_list_item);
Log.d(TAG, "constructor called");
this.context = context;
this.conferences = conferences;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "getView called");
LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflator.inflate(R.layout.conference_list_item, parent, false);
Date conferenceDate = new Date(conferences.get(position).getStart());
TextView dayOfWeek = (TextView) view.findViewById(R.id.conference_list_dayofweek);
dayOfWeek.setText(new SimpleDateFormat("E").format(conferenceDate));
TextView date = (TextView) view.findViewById(R.id.conference_list_date);
date.setText(new SimpleDateFormat("dd.MM.yyyy").format(conferenceDate));
TextView time = (TextView) view.findViewById(R.id.conference_list_time);
time.setText(new SimpleDateFormat("HH:mm").format(new Date(conferences.get(position).getStart())) +
new SimpleDateFormat("HH:mm").format(new Date(conferences.get(position).getEnd())));
return view;
}
会议列表布局.xml
<include layout="@layout/actionbar_layout" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
会议列表项目.xml
<TextView
android:id="@+id/conference_list_dayofweek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/conference_list_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/conference_list_dayofweek" />
<TextView
android:id="@+id/conference_list_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/conference_list_date" />
可能是错误在xml文件中。我正在使用几个自定义的 ArrayAdapter,它们都可以正常工作并且看起来几乎相同。我读过一些关于使用 match_parent 而不是 wrap_content 的内容,但没有成功。