我正在努力推动学校规划应用程序。对于包含在选项卡布局中的每一天,有一个时间表概述作为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上呈现为一个空行,因为对于lessonList中的每个项目调用getView(...)
,如果工作日不是所需的工作日,它只会返回new View()
,我想。
一个解决方案可能是为适当的工作日创建5个ArrayLists和5个ArrayAdapter。所以周一的课程将在ArrayList mondayList
,并且适配器将绑定到此列表。但这有点不灵活。
有更好的解决方案吗?
提前致谢。
答案 0 :(得分:0)
使用SimpleAdapter而不是使用ArrayAdapter。它对于您想要显示的内容要灵活得多。其次,将所有约会的ArrayList保留在适配器之外,创建某种过滤方法以复制适用的对象并将此新列表传递给SimpleAdapter。