Skip to content

Instantly share code, notes, and snippets.

@voghDev
Last active May 4, 2017 07:17
Show Gist options
  • Save voghDev/1be3b571019841a86c87 to your computer and use it in GitHub Desktop.
Save voghDev/1be3b571019841a86c87 to your computer and use it in GitHub Desktop.
Generic RendererBuilder implementation that supports "multi-renderer" mode (a single RendererBuilder for all Renderer classes)
package x.y.z;
import android.content.Context;
import com.pedrogomez.renderers.Renderer;
import com.pedrogomez.renderers.RendererBuilder;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Example RendererBuilder class for Navigation Drawer elements
* This example could have two ND item types:
* NDUserProfile which renders a picture of the user, and its name
* NDImage which renders a full-width icon
*
* see https://github.com/pedrovgs/Renderers
*/
public class NDRendererBuilder extends RendererBuilder<NDElement> {
Map<String, Class> renderers = new HashMap<>();
public NDRendererBuilder(Context context, NDElementRenderer.OnRowClicked onClickListener) {
Collection<Renderer<NDElement>> prototypes = getPrototypes(context, onClickListener);
setPrototypes(prototypes);
}
@Override
protected Class getPrototypeClass(NDElement content) {
Class rendererClass = renderers.get(content.getClass().getName());
return rendererClass != null ?
rendererClass : NDImageRenderer.class;
}
private List<Renderer<NDElement>> getPrototypes(Context context, NDElementRenderer.OnRowClicked onRowClicked) {
List<Renderer<NDElement>> prototypes = new LinkedList<Renderer<NDElement>>();
NDElementRenderer ndir = new NDImageRenderer(context, onRowClicked);
NDElementRenderer ndupr = new NDUserProfileRenderer(context, onRowClicked);
prototypes.add(ndir);
prototypes.add(ndupr);
registerRenderer(NDImage.class.getName(), NDImageRenderer.class);
registerRenderer(NDUserProfile.class.getName(), NDUserProfileRenderer.class);
return prototypes;
}
protected void registerRenderer(String renderableClassName, Class rendererClass){
renderers.put(renderableClassName, rendererClass);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment