Skip to content

Commit 2d342d2

Browse files
committed
Simplified to only require populateViewHolder in subclasses
1 parent c18fdff commit 2d342d2

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

library/library.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<module external.linked.project.id=":library" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="com.firebase" external.system.module.version="0.1.0" type="JAVA_MODULE" version="4">
2+
<module external.linked.project.id=":library" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="FirebaseUI-Android" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
33
<component name="FacetManager">
44
<facet type="android-gradle" name="Android-Gradle">
55
<configuration>

library/src/main/java/com/firebase/ui/FirebaseRecyclerViewAdapter.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,18 @@
3030

3131
import android.support.v7.widget.RecyclerView;
3232
import android.util.Log;
33+
import android.view.LayoutInflater;
34+
import android.view.View;
35+
import android.view.ViewGroup;
3336

3437
import com.firebase.client.ChildEventListener;
3538
import com.firebase.client.DataSnapshot;
3639
import com.firebase.client.Firebase;
3740
import com.firebase.client.FirebaseError;
3841
import com.firebase.client.Query;
3942

43+
import java.lang.reflect.Constructor;
44+
import java.lang.reflect.InvocationTargetException;
4045
import java.util.ArrayList;
4146
import java.util.HashMap;
4247
import java.util.List;
@@ -51,8 +56,10 @@
5156
*/
5257
public 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

Comments
 (0)