diff options
Diffstat (limited to 'libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java')
-rw-r--r-- | libraries/StickyListHeaders/sample/src/se/emilsjolander/stickylistheaders/TestBaseAdapter.java | 169 |
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; + } + +} |