Last active
November 15, 2019 11:50
-
-
Save caneryilmaz/aac7edc3ff978464a34c1c976a39e2d4 to your computer and use it in GitHub Desktop.
This file contains 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 characters
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