ArrayAdapter и ListView отображают только определенные элементы

Я пытаюсь внедрить приложение школьного планировщика. Существует обзор расписания, реализованный в виде ListView для каждого дня, заключенного в макет вкладки. Таким образом, пользователь может переключаться между днями с понедельника по пятницу и получать расписание на конкретный день.

public class TimetableAdapter extends ArrayAdapter<Lesson> {
    private List<Lesson> lessonList; // The model

...

public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    ...
    view = inflater.inflate(R.layout.timetable_row, null);
    Lesson currentLesson = lessonList.get(position);

    // Checks if selected Tab (context.getDay()) correspondends to 
    // currentLesson's day. If so the lesson will be rendered into
    // the appropriated ListView. So if the user selects the Monday Tab 
    // he only wants to see the lessons for Monday.
    if (context.getDay() == currentLesson.getWeekDay().getWeekDay()) {
        fillView(currentLesson, holder); // render Lesson
    }
    ...
    return view;
}

private void fillView(Lesson currentLesson, ViewHolder holder) {
    holder.subject.setText(currentLesson.getSubject().getName());
}

public class TimetableActivity extends Activity implements OnTabChangeListener {
    public void onCreate(Bundle savedInstanceState) {
        ....
        timetableAdapter = new TimetableAdapter(this, getModel());
    }

private List<Lesson> getModel() {
    return timetable.getLessons();
}

public void onTabChanged(String tabId) {
    currentTabName = tabId;
    if (tabId.equals("tabMonday")) {
    setCurrentListView(mondayListView);
    }
    else if (tabId.equals("tabTuesday")) { 
        // Checks tabTuesday and so on....
        ...
    }
 }    
private void addLesson() {
    timetable.addLesson(new Lesson(blabla(name, weekday etc.))); // blabla = user specified values
    timetableAdapter.notifyDataSetChanged();
}

Таким образом, если пользователь добавляет урок, он указывает некоторые параметры, такие как соответствующий день недели, имя и т. д. Это представлено blabla.

Проблема в том, что, поскольку я использую только один ArrayList для своих данных, независимо от того, будет ли это предмет в понедельник или во вторник урок, например. для понедельника отображается в ListView моего вторника как пустая строка, потому что getView(...) вызывается для каждого элемента в LessonList, и он просто возвращает new View(), если день недели, я думаю, не является желаемым.

Одним из решений может быть создание 5 ArrayList и 5 ArrayAdapters для соответствующих дней недели. Так что уроки в понедельник будут в ArrayList mondayList, и адаптер будет привязан к этому списку. Но это несколько негибко. Есть ли лучшее решение?

Заранее спасибо.


person r6203    schedule 30.09.2011    source источник


Ответы (1)


Вместо использования ArrayAdapter используйте SimpleAdapter. Это гораздо более гибко для того, что вы хотите отобразить. Во-вторых, держите свой ArrayList всех встреч вне адаптера, создайте какой-то метод фильтрации для копирования применимых объектов и передачи этого нового списка в SimpleAdapter.

person Dan S    schedule 30.09.2011
comment
Ok. Спасибо. Это решение кажется относительно простым в реализации. Я попробую. - person r6203; 01.10.2011
comment
Кстати, вам нужно будет скопировать только ссылку, а не глубокую копию объекта. - person Dan S; 03.10.2011