Back to project page SELP2013.
The source code is released under:
License ======= This work is licensed under the BSD 2-clause license as follows. # BSD 2-clause license Copyright (c) 2013, Sky Welch All rights reserved. Redistribution and use in source and ...
If you think the Android project SELP2013 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package uk.co.skywelch.selp2013; /* w w w .j a v a 2s. c o m*/ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class TimetableListAdapter extends BaseAdapter { public static final String TAG = "TimetableAdapterItem"; private Context mContext; private ArrayList<Lecture> lectures; private ArrayList<ListItem> shown_items; private int semester_filter; private boolean filter_checked; private String filter_course; public TimetableListAdapter(Context mContext, ArrayList<Lecture> lectures, int semester_filter, boolean filter_checked, String filter_course) { this.mContext = mContext; this.lectures = lectures; this.semester_filter = semester_filter; // Initially the list should be empty this.shown_items = new ArrayList<ListItem>(); this.filter_checked = filter_checked; this.filter_course = filter_course; } @Override public int getCount() { return shown_items.size(); } @Override public Object getItem(int position) { return shown_items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ListItem item = (ListItem) getItem(position); if (item.isSection()) { // Use given convertView if it's the View we want (performance optimisation) if (convertView == null || convertView.findViewById(R.id.list_header_title) == null) { LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); convertView = inflater.inflate(R.layout.list_header, parent, false); } // Set the section title TextView section_text = (TextView) convertView.findViewById(R.id.list_header_title); ListSection section = (ListSection) item; section_text.setText(section.getTitle()); } else { // Use given convertView if it's the View we want (performance optimisation) if (convertView == null || convertView.findViewById(R.id.timetableRowTitle) == null) { LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); convertView = inflater.inflate(R.layout.timetable_row, parent, false); } // Set the timetable information, if it's available Lecture lecture = (Lecture) item; TextView title = (TextView) convertView.findViewById(R.id.timetableRowTitle); TextView time = (TextView) convertView.findViewById(R.id.timetableRowTime); TextView location = (TextView) convertView.findViewById(R.id.timetableRowLocation); TextView comment = (TextView) convertView.findViewById(R.id.timetableRowComments); Course assocCourse = TimetableActivity.course_map.get(lecture.course); if (assocCourse == null) { Log.e(TAG, "No course matching code " + lecture.course + " found - couldn't get course details"); title.setText(lecture.course); } else { title.setText(assocCourse.getNamePlusAcronym()); } String sStart = lecture.start.toString(); String sFinish = lecture.finish.toString(); time.setText(sStart + " - " + sFinish); String sLocation = ""; Venue venue = TimetableActivity.venue_map.get(lecture.building); if (venue != null) { sLocation += venue.name; } else { if (!lecture.building.isEmpty()) { sLocation += lecture.building; } else { sLocation += "Unknown building"; } } if (!lecture.room.isEmpty()) { sLocation += " - " + lecture.room; } location.setText(sLocation); if (lecture.comment.isEmpty()) { comment.setVisibility(View.GONE); } else { comment.setVisibility(View.VISIBLE); comment.setText(lecture.comment); } } return convertView; } // Repopulates the shown items based on the adapter's filters public void resetItems() { shown_items.clear(); HashMap<String, ArrayList<Lecture>> day_lectures = new HashMap<String, ArrayList<Lecture>>(); // Set up headings based on days for (int i = 0; i < TimetableActivity.days.size(); i++) { day_lectures.put(TimetableActivity.days.get(i), new ArrayList<Lecture>()); } // For each lecture, add it to the appropriate day bucket if it meets // filtering requirements for (Lecture l : lectures) { String day_key = l.day; if (!TimetableActivity.days.contains(day_key)) { day_key = TimetableActivity.days.get(TimetableActivity.days.size() - 1); } boolean ischecked = TimetableActivity.course_checks.contains(l.course); if ((ischecked || !filter_checked && (filter_course.isEmpty() || filter_course.equals(l.course))) && (l.semester == this.semester_filter || this.semester_filter == -1)) { day_lectures.get(day_key).add(l); } } // Iterate through the day buckets and add them to the shown items for (int i = 0; i < TimetableActivity.days.size() - 1; i++) { String day = TimetableActivity.days.get(i); ArrayList<Lecture> days_lectures = day_lectures.get(day); Collections.sort(days_lectures); shown_items.add(new ListSection(day)); for (Lecture l : days_lectures) { shown_items.add(l); } } // Only show the "unknown" bucket if it contains items // Otherwise it's usually just visually noisy for no good reason String unknown = TimetableActivity.days.get(TimetableActivity.days.size() - 1); ArrayList<Lecture> unknown_lectures = day_lectures.get(unknown); if (unknown_lectures.size() > 0) { Collections.sort(unknown_lectures); shown_items.add(new ListSection(unknown)); for (Lecture l : unknown_lectures) { shown_items.add(l); } } this.notifyDataSetChanged(); } }