Skip to content

Instantly share code, notes, and snippets.

@caneryilmaz
Last active November 15, 2019 11:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save caneryilmaz/aac7edc3ff978464a34c1c976a39e2d4 to your computer and use it in GitHub Desktop.
Save caneryilmaz/aac7edc3ff978464a34c1c976a39e2d4 to your computer and use it in GitHub Desktop.
package com.caner.indirimsesi.base;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class GenericAdapter<T> extends RecyclerView.Adapter<GenericAdapter.ViewHolder> {
private List<T> items;
private Context context;
private OnViewHolderClick<T> listener;
public interface OnViewHolderClick<T> {
void onClick(View view, int position, T item);
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private Map<Integer, View> views;
public ViewHolder(View view, OnViewHolderClick listener) {
super(view);
views = new HashMap<>();
views.put(0, view);
if (listener != null)
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (listener != null)
listener.onClick(view, getAdapterPosition(), getItem(getAdapterPosition()));
}
public void initViewList(int[] idList) {
for (int id : idList)
initViewById(id);
}
public void initViewById(int id) {
View view = (getView() != null ? getView().findViewById(id) : null);
if (view != null)
views.put(id, view);
}
public View getView() {
return getView(0);
}
public View getView(int id) {
if (views.containsKey(id))
return views.get(id);
else
initViewById(id);
return views.get(id);
}
}
protected abstract View createView(Context context, ViewGroup viewGroup, int viewType);
protected abstract void bindView(T item, GenericAdapter.ViewHolder viewHolder);
public GenericAdapter(Context context) {
this(context, null);
}
public GenericAdapter(Context context, OnViewHolderClick<T> listener) {
super();
this.context = context;
this.listener = listener;
items = new ArrayList<>();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
return new ViewHolder(createView(context, viewGroup, viewType), listener);
}
@Override
public void onBindViewHolder(GenericAdapter.ViewHolder holder, int position) {
bindView(getItem(position), holder);
}
@Override
public int getItemCount() {
return items.size();
}
public T getItem(int index) {
return ((items != null && index < items.size()) ? items.get(index) : null);
}
public Context getContext() {
return context;
}
public void setList(List<T> list) {
items = list;
}
public List<T> getList() {
return items;
}
public void setClickListener(OnViewHolderClick listener) {
this.listener = listener;
}
public void addAll(List<T> list) {
items.addAll(list);
notifyDataSetChanged();
}
public void reset() {
items.clear();
notifyDataSetChanged();
}
}
//---------------------extend adapter-------------//
public class TestRecyclerAdapter extends GenericAdapter<PushOrderRequest> {
public TestRecyclerAdapter(Context context, OnViewHolderClick<PushOrderRequest> listener) {
super(context, listener);
}
@Override
protected View createView(Context context, ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.item_orders_adapter, viewGroup, false);
return view;
}
@Override
protected void bindView(PushOrderRequest item, GenericAdapter.ViewHolder viewHolder) {
if (item != null) {
TextView textView = (TextView) viewHolder.getView(R.id.text_description);
textView.setText(item.getFirmName());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment