Skip to content

Instantly share code, notes, and snippets.

@onatakduman
Created July 23, 2019 19:47
Show Gist options
  • Save onatakduman/adc196fbe4f56ce5c3d5675577fda936 to your computer and use it in GitHub Desktop.
Save onatakduman/adc196fbe4f56ce5c3d5675577fda936 to your computer and use it in GitHub Desktop.
RecyclerView Adapter Template (Java)
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
#parse("File Header.java")
public class ${Adapter_Name} extends RecyclerView.Adapter<${Adapter_Name}.ViewHolder> {
private static final String TAG = ${Adapter_Name}.class.getSimpleName();
private Context context;
private List<${Model_Class}> list = new ArrayList<>();
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnClickListener(OnItemClickListener listener){
this.onItemClickListener = listener;
}
public ${Adapter_Name}() {}
public ${Adapter_Name}(Context context, List<${Model_Class}> list, OnItemClickListener onItemClickListener) {
this.context = context;
this.list = list;
this.onItemClickListener = onItemClickListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.${Item_Layout_ID}, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
${Model_Class} item = list.get(position);
holder.bind(item, onItemClickListener);
}
@Override
public int getItemCount() {
return list.size();
}
public void updateList(${Model_Class} newList) {
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffCallback(newList, this.list));
this.list.clear();
this.list.addAll(newList);
diffResult.dispatchUpdatesTo(this);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
// Todo bindings
public ViewHolder(View itemView) {
super(itemView);
//ButterKnife.bind(this, itemView);
}
public void bind(final ${Model_Class} model, final OnItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(getLayoutPosition());
}
});
}
}
public class DiffCallback extends DiffUtil.Callback {
List<${Model_Class}> oldTodoList;
List<${Model_Class}> newTodoList;
public DiffCallback(List<${Model_Class}> newTodoList, List<${Model_Class}> oldTodoList) {
this.newTodoList = newTodoList;
this.oldTodoList = oldTodoList;
}
@Override
public int getOldListSize() {
return oldTodoList.size();
}
@Override
public int getNewListSize() {
return newTodoList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldTodoList.get(oldItemPosition).equals(newTodoList.get(newItemPosition));
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return oldTodoList.get(oldItemPosition) == newTodoList.get(newItemPosition);
}
@Nullable
@Override
public Object getChangePayload(int oldItemPosition, int newItemPosition) {
//you can return particular field for changed item.
return super.getChangePayload(oldItemPosition, newItemPosition);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment