3030
3131import android .support .v7 .widget .RecyclerView ;
3232import android .util .Log ;
33+ import android .view .LayoutInflater ;
34+ import android .view .View ;
35+ import android .view .ViewGroup ;
3336
3437import com .firebase .client .ChildEventListener ;
3538import com .firebase .client .DataSnapshot ;
3639import com .firebase .client .Firebase ;
3740import com .firebase .client .FirebaseError ;
3841import com .firebase .client .Query ;
3942
43+ import java .lang .reflect .Constructor ;
44+ import java .lang .reflect .InvocationTargetException ;
4045import java .util .ArrayList ;
4146import java .util .HashMap ;
4247import java .util .List ;
5156 */
5257public abstract class FirebaseRecyclerViewAdapter <T , VH extends RecyclerView .ViewHolder > extends RecyclerView .Adapter <VH > {
5358
54- FirebaseArray mSnapshots ;
5559 Class <T > mModelClass ;
60+ protected int mModelLayout ;
61+ Class <VH > mViewHolderClass ;
62+ FirebaseArray mSnapshots ;
5663 protected RecyclerViewClickListener clickListener ;
5764
5865
@@ -61,8 +68,10 @@ public abstract class FirebaseRecyclerViewAdapter<T, VH extends RecyclerView.Vie
6168 * combination of <code>limit()</code>, <code>startAt()</code>, and <code>endAt()</code>,
6269 * @param modelClass Firebase will marshall the data at a location into an instance of a class that you provide
6370 */
64- public FirebaseRecyclerViewAdapter (Query ref , Class <T > modelClass ) {
71+ public FirebaseRecyclerViewAdapter (Query ref , Class <T > modelClass , int modelLayout , Class < VH > viewHolderClass ) {
6572 mModelClass = modelClass ;
73+ mModelLayout = modelLayout ;
74+ mViewHolderClass = viewHolderClass ;
6675 mSnapshots = new FirebaseArray (ref );
6776
6877 mSnapshots .setOnChangedListener (new FirebaseArray .OnChangedListener () {
@@ -114,6 +123,30 @@ public void setClickListener(RecyclerViewClickListener clickListener) {
114123 this .clickListener = clickListener ;
115124 }
116125
126+ @ Override
127+ public VH onCreateViewHolder (ViewGroup parent , int viewType ) {
128+ ViewGroup view = (ViewGroup ) LayoutInflater .from (parent .getContext ()).inflate (mModelLayout , parent , false );
129+ try {
130+ Constructor <VH > constructor = mViewHolderClass .getConstructor (View .class );
131+ return constructor .newInstance (view );
132+ } catch (NoSuchMethodException e ) {
133+ throw new RuntimeException (e );
134+ } catch (InvocationTargetException e ) {
135+ throw new RuntimeException (e );
136+ } catch (InstantiationException e ) {
137+ throw new RuntimeException (e );
138+ } catch (IllegalAccessException e ) {
139+ throw new RuntimeException (e );
140+ }
141+ }
142+ @ Override
143+ public void onBindViewHolder (VH viewHolder , int i ) {
144+ T model = getItem (i );
145+ populateViewHolder (viewHolder , model );
146+ }
147+
148+ abstract public void populateViewHolder (VH viewHolder , T model );
149+
117150 public interface RecyclerViewClickListener {
118151 public void onItemClicked (int position );
119152 }
0 commit comments