aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java')
-rw-r--r--libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java b/libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java
new file mode 100644
index 000000000..777b7bd57
--- /dev/null
+++ b/libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java
@@ -0,0 +1,169 @@
+package se.emilsjolander.stickylistheaders;
+
+import java.util.ArrayList;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.SectionIndexer;
+import android.widget.TextView;
+
+/**
+ * @author Emil Sjölander
+ */
+public class TestBaseAdapter extends BaseAdapter implements
+ StickyListHeadersAdapter, SectionIndexer {
+
+ private final Context mContext;
+ private String[] mCountries;
+ private int[] mSectionIndices;
+ private Character[] mSectionLetters;
+ private LayoutInflater mInflater;
+
+ public TestBaseAdapter(Context context) {
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ mCountries = context.getResources().getStringArray(R.array.countries);
+ mSectionIndices = getSectionIndices();
+ mSectionLetters = getSectionLetters();
+ }
+
+ private int[] getSectionIndices() {
+ ArrayList<Integer> sectionIndices = new ArrayList<Integer>();
+ char lastFirstChar = mCountries[0].charAt(0);
+ sectionIndices.add(0);
+ for (int i = 1; i < mCountries.length; i++) {
+ if (mCountries[i].charAt(0) != lastFirstChar) {
+ lastFirstChar = mCountries[i].charAt(0);
+ sectionIndices.add(i);
+ }
+ }
+ int[] sections = new int[sectionIndices.size()];
+ for (int i = 0; i < sectionIndices.size(); i++) {
+ sections[i] = sectionIndices.get(i);
+ }
+ return sections;
+ }
+
+ private Character[] getSectionLetters() {
+ Character[] letters = new Character[mSectionIndices.length];
+ for (int i = 0; i < mSectionIndices.length; i++) {
+ letters[i] = mCountries[mSectionIndices[i]].charAt(0);
+ }
+ return letters;
+ }
+
+ @Override
+ public int getCount() {
+ return mCountries.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mCountries[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+
+ if (convertView == null) {
+ holder = new ViewHolder();
+ convertView = mInflater.inflate(R.layout.test_list_item_layout, parent, false);
+ holder.text = (TextView) convertView.findViewById(R.id.text);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder) convertView.getTag();
+ }
+
+ holder.text.setText(mCountries[position]);
+
+ return convertView;
+ }
+
+ @Override
+ public View getHeaderView(int position, View convertView, ViewGroup parent) {
+ HeaderViewHolder holder;
+
+ if (convertView == null) {
+ holder = new HeaderViewHolder();
+ convertView = mInflater.inflate(R.layout.header, parent, false);
+ holder.text = (TextView) convertView.findViewById(R.id.text1);
+ convertView.setTag(holder);
+ } else {
+ holder = (HeaderViewHolder) convertView.getTag();
+ }
+
+ // set header text as first char in name
+ CharSequence headerChar = mCountries[position].subSequence(0, 1);
+ holder.text.setText(headerChar);
+
+ return convertView;
+ }
+
+ /**
+ * Remember that these have to be static, postion=1 should always return
+ * the same Id that is.
+ */
+ @Override
+ public long getHeaderId(int position) {
+ // return the first character of the country as ID because this is what
+ // headers are based upon
+ return mCountries[position].subSequence(0, 1).charAt(0);
+ }
+
+ @Override
+ public int getPositionForSection(int section) {
+ if (section >= mSectionIndices.length) {
+ section = mSectionIndices.length - 1;
+ } else if (section < 0) {
+ section = 0;
+ }
+ return mSectionIndices[section];
+ }
+
+ @Override
+ public int getSectionForPosition(int position) {
+ for (int i = 0; i < mSectionIndices.length; i++) {
+ if (position < mSectionIndices[i]) {
+ return i - 1;
+ }
+ }
+ return mSectionIndices.length - 1;
+ }
+
+ @Override
+ public Object[] getSections() {
+ return mSectionLetters;
+ }
+
+ public void clear() {
+ mCountries = new String[0];
+ mSectionIndices = new int[0];
+ mSectionLetters = new Character[0];
+ notifyDataSetChanged();
+ }
+
+ public void restore() {
+ mCountries = mContext.getResources().getStringArray(R.array.countries);
+ mSectionIndices = getSectionIndices();
+ mSectionLetters = getSectionLetters();
+ notifyDataSetChanged();
+ }
+
+ class HeaderViewHolder {
+ TextView text;
+ }
+
+ class ViewHolder {
+ TextView text;
+ }
+
+}