不调用自定义ArrayAdapter的getView

时间:2012-04-21 20:39:20

标签: android android-layout

由于某些原因,我的自定义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;
}

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" />

可能是错误在xml文件中。我正在使用几个定制的ArrayAdapter,它们都工作得很好,看起来几乎一样。我已经阅读了一些关于使用match_parent而不是wrap_content的内容,但它没有用完。

2 个答案:

答案 0 :(得分:8)

在您的自定义适配器(可能会扩展ArrayAdapter)中实施getCount方法并返回Conferences大小的列表:

public int getCount() {
   return conferences.size();
}

答案 1 :(得分:0)

您的数组适配器类需要extends ArrayAdapter - 否则它不知道要调用的方法

相关问题