ArrayAdapter и ListView отображают только определенные элементы - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь помешать приложению по планированию школы. Существует обзор расписания, реализованный в виде 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();
}

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

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

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

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

1 Ответ

0 голосов
/ 30 сентября 2011

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

...