-
-
Save gordonpassy/543f8ec2cb37d9a5c91d to your computer and use it in GitHub Desktop.
Revisions
-
gabrielemariotti revised this gist
Jan 15, 2015 . 1 changed file with 55 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,55 @@ public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.SimpleViewHolder> { private final Context mContext; private List<String> mData; public void add(String s,int position) { position = position == -1 ? getItemCount() : position; mData.add(position,s); notifyItemInserted(position); } public void remove(int position){ if (position < getItemCount() ) { mData.remove(position); notifyItemRemoved(position); } } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public final TextView title; public SimpleViewHolder(View view) { super(view); title = (TextView) view.findViewById(R.id.simple_text); } } public SimpleAdapter(Context context, String[] data) { mContext = context; if (data != null) mData = new ArrayList<String>(Arrays.asList(data)); else mData = new ArrayList<String>(); } public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final View view = LayoutInflater.from(mContext).inflate(R.layout.simple_item, parent, false); return new SimpleViewHolder(view); } @Override public void onBindViewHolder(SimpleViewHolder holder, final int position) { holder.title.setText(mData.get(position)); holder.title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(mContext,"Position ="+position,Toast.LENGTH_SHORT).show(); } }); } @Override public int getItemCount() { return mData.size(); } } -
gabrielemariotti revised this gist
Jan 15, 2015 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -5,6 +5,8 @@ You can use this code also with the `TwoWayView` with the `ListLayoutManager` (h This is a porting of the class `SimpleSectionedListAdapter` provided by [Google](https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/SimpleSectionedListAdapter.java)  Example: ```java //Your RecyclerView -
gabrielemariotti revised this gist
Aug 16, 2014 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,6 +1,9 @@ You can use this class to realize a simple sectioned `RecyclerView.Adapter` without changing your code. The `RecyclerView` should use a `LinearLayoutManager`. You can use this code also with the `TwoWayView` with the `ListLayoutManager` (https://github.com/lucasr/twoway-view) This is a porting of the class `SimpleSectionedListAdapter` provided by [Google](https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/SimpleSectionedListAdapter.java) Example: ```java -
gabrielemariotti created this gist
Aug 16, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,39 @@ You can use this class to realize a simple sectioned `RecyclerView.Adapter` without changing your code. The `RecyclerView` should use a `LinearLayoutManager`. Example: ```java //Your RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.list); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL)); //Your RecyclerView.Adapter mAdapter = new SimpleAdapter(this,sCheeseStrings); //This is the code to provide a sectioned list List<SimpleSectionedRecyclerViewAdapter.Section> sections = new ArrayList<SimpleSectionedRecyclerViewAdapter.Section>(); //Sections sections.add(new SimpleSectionedRecyclerViewAdapter.Section(0,"Section 1")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(5,"Section 2")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(12,"Section 3")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(14,"Section 4")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(20,"Section 5")); //Add your adapter to the sectionAdapter SimpleSectionedRecyclerViewAdapter.Section[] dummy = new SimpleSectionedRecyclerViewAdapter.Section[sections.size()]; SimpleSectionedRecyclerViewAdapter mSectionedAdapter = new SimpleSectionedRecyclerViewAdapter(this,R.layout.section,R.id.section_text,mAdapter); mSectionedAdapter.setSections(sections.toArray(dummy)); //Apply this adapter to the RecyclerView mRecyclerView.setAdapter(mSectionedAdapter); ``` You can customize the section layout, changing the layout section.xml and changing the code in the `SimpleSectionedRecyclerViewAdapter.SectionViewHolder` class and `SimpleSectionedRecyclerViewAdapter#onBindViewHolder` method. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,170 @@ public class SimpleSectionedRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final Context mContext; private static final int SECTION_TYPE = 0; private boolean mValid = true; private int mSectionResourceId; private int mTextResourceId; private LayoutInflater mLayoutInflater; private RecyclerView.Adapter mBaseAdapter; private SparseArray<Section> mSections = new SparseArray<Section>(); public SimpleSectionedRecyclerViewAdapter(Context context, int sectionResourceId, int textResourceId, RecyclerView.Adapter baseAdapter) { mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mSectionResourceId = sectionResourceId; mTextResourceId = textResourceId; mBaseAdapter = baseAdapter; mContext = context; mBaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { mValid = mBaseAdapter.getItemCount()>0; notifyDataSetChanged(); } @Override public void onItemRangeChanged(int positionStart, int itemCount) { mValid = mBaseAdapter.getItemCount()>0; notifyItemRangeChanged(positionStart, itemCount); } @Override public void onItemRangeInserted(int positionStart, int itemCount) { mValid = mBaseAdapter.getItemCount()>0; notifyItemRangeInserted(positionStart, itemCount); } @Override public void onItemRangeRemoved(int positionStart, int itemCount) { mValid = mBaseAdapter.getItemCount()>0; notifyItemRangeRemoved(positionStart, itemCount); } }); } public static class SectionViewHolder extends RecyclerView.ViewHolder { public TextView title; public SectionViewHolder(View view,int mTextResourceid) { super(view); title = (TextView) view.findViewById(mTextResourceid); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int typeView) { if (typeView == SECTION_TYPE) { final View view = LayoutInflater.from(mContext).inflate(mSectionResourceId, parent, false); return new SectionViewHolder(view,mTextResourceId); }else{ return mBaseAdapter.onCreateViewHolder(parent, typeView -1); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder sectionViewHolder, int position) { if (isSectionHeaderPosition(position)) { ((SectionViewHolder)sectionViewHolder).title.setText(mSections.get(position).title); }else{ mBaseAdapter.onBindViewHolder(sectionViewHolder,sectionedPositionToPosition(position)); } } @Override public int getItemViewType(int position) { return isSectionHeaderPosition(position) ? SECTION_TYPE : mBaseAdapter.getItemViewType(sectionedPositionToPosition(position)) +1 ; } public static class Section { int firstPosition; int sectionedPosition; CharSequence title; public Section(int firstPosition, CharSequence title) { this.firstPosition = firstPosition; this.title = title; } public CharSequence getTitle() { return title; } } public void setSections(Section[] sections) { mSections.clear(); Arrays.sort(sections, new Comparator<Section>() { @Override public int compare(Section o, Section o1) { return (o.firstPosition == o1.firstPosition) ? 0 : ((o.firstPosition < o1.firstPosition) ? -1 : 1); } }); int offset = 0; // offset positions for the headers we're adding for (Section section : sections) { section.sectionedPosition = section.firstPosition + offset; mSections.append(section.sectionedPosition, section); ++offset; } notifyDataSetChanged(); } public int positionToSectionedPosition(int position) { int offset = 0; for (int i = 0; i < mSections.size(); i++) { if (mSections.valueAt(i).firstPosition > position) { break; } ++offset; } return position + offset; } public int sectionedPositionToPosition(int sectionedPosition) { if (isSectionHeaderPosition(sectionedPosition)) { return RecyclerView.NO_POSITION; } int offset = 0; for (int i = 0; i < mSections.size(); i++) { if (mSections.valueAt(i).sectionedPosition > sectionedPosition) { break; } --offset; } return sectionedPosition + offset; } public boolean isSectionHeaderPosition(int position) { return mSections.get(position) != null; } @Override public long getItemId(int position) { return isSectionHeaderPosition(position) ? Integer.MAX_VALUE - mSections.indexOfKey(position) : mBaseAdapter.getItemId(sectionedPositionToPosition(position)); } @Override public int getItemCount() { return (mValid ? mBaseAdapter.getItemCount() + mSections.size() : 0); } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:paddingLeft="16dp" android:singleLine="true" android:textAllCaps="true" android:textColor="@color/demo_theme_status_bar_color" android:background="@android:color/transparent" android:textSize="16sp" android:id="@+id/section_text" android:textStyle="bold" />