Reputation: 321
For some reasons getView of my customized ArrayAdapter isn't called and android displays an empty list. I've already inserted cursor.getCount() in my datasource class to make sure my query isn't empty.
Activity:
@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));
}
Datasource:
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;
}
ArrayAdapter:
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;
}
conference_list_layout.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>
conference_list_item.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" />
Could it be, that the error is in the xml file. I'm using several customized ArrayAdapters and they all work fine and look nearly the same. I've read something about using match_parent instead of wrap_content but it didn't work out.
Upvotes: 1
Views: 2107
Reputation: 87064
In your custom adapter(your probably extending ArrayAdapter
) implement the getCount
method and return the list of Conferences
size:
public int getCount() {
return conferences.size();
}
Upvotes: 8
Reputation: 11053
You need to extends ArrayAdapter
for your array adapter class - otherwise it does not know the method to be called
Upvotes: 0