Created
May 16, 2018 05:59
-
-
Save vishalhalani/093461b7fd4125358b6c729b5a9adbe7 to your computer and use it in GitHub Desktop.
Adapter to show data like datewise (timeline) with load more feature
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
/** | |
* Created by vishal.halani on 11-May-18. | |
*/ | |
public class TaskAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |
private final int VIEW_ITEM = 1; | |
private final int VIEW_PROG = 0; | |
// The minimum amount of items to have below your current scroll position | |
// before loading more. | |
private int visibleThreshold = 5; | |
private int lastVisibleItem, totalItemCount; | |
private boolean loading; | |
private OnLoadMoreListener onLoadMoreListener; | |
private SimpleDateFormat myDateFormat; | |
ArrayList<TaskModel> mList; | |
private Context context; | |
boolean isAllSelected = false; | |
public TaskAdapter(ArrayList<TaskModel> mList, Context context, RecyclerView recyclerView) { | |
this.context = context; | |
this.mList = mList; | |
myDateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.UK); | |
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) { | |
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView | |
.getLayoutManager(); | |
recyclerView | |
.addOnScrollListener(new RecyclerView.OnScrollListener() { | |
@Override | |
public void onScrolled(RecyclerView recyclerView, | |
int dx, int dy) { | |
super.onScrolled(recyclerView, dx, dy); | |
totalItemCount = linearLayoutManager.getItemCount(); | |
lastVisibleItem = linearLayoutManager | |
.findLastVisibleItemPosition(); | |
if (!loading | |
&& totalItemCount <= (lastVisibleItem + visibleThreshold)) { | |
// End has been reached | |
// Do something | |
if (onLoadMoreListener != null) { | |
onLoadMoreListener.onLoadMore(); | |
} | |
loading = true; | |
} | |
} | |
}); | |
} | |
} | |
@Override | |
public int getItemViewType(int position) { | |
return mList.get(position) != null ? VIEW_ITEM : VIEW_PROG; | |
} | |
public void setAllSelected(boolean allSelected) { | |
isAllSelected = allSelected; | |
} | |
@Override | |
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { | |
RecyclerView.ViewHolder vh; | |
if (viewType == VIEW_ITEM) { | |
View v = LayoutInflater.from(viewGroup.getContext()).inflate( | |
R.layout.item_assigned_task_layout, viewGroup, false); | |
vh = new ItemViewHolder(v); | |
; | |
} else { | |
View v = LayoutInflater.from(viewGroup.getContext()).inflate( | |
R.layout.footer_progressbar, viewGroup, false); | |
vh = new ProgressViewHolder(v); | |
} | |
return vh; | |
// if (viewType == TYPE_ITEM) { | |
// View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_assigned_task_layout, viewGroup, false); | |
// return new ItemViewHolder(view); | |
// } else if (viewType == TYPE_HEADER) { | |
// View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.header_layout, viewGroup, false); | |
// return new HeaderViewHolder(view); | |
// | |
// } | |
// throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly"); | |
} | |
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { | |
if (holder instanceof ItemViewHolder) { | |
ItemViewHolder vholder = (ItemViewHolder) holder; | |
final TaskModel item = (TaskModel) mList.get(position); | |
//set the id to editetxt important line here as it will be helpful to set text according to position | |
vholder.tvTask.setId(position); | |
vholder.tvTask.setText(item.getTask()); | |
// vholder.tvStartDate.setText(Const.convertServerDateToOnlyUserDate(item.getStartDate())); | |
// vholder.tvEndDate.setText(Const.convertServerDateToOnlyUserDate(item.getDueDate())); | |
showTimeLines(position, vholder, item); | |
if (item.getStatus().equals(Const.STATUS_COMPLETED)) { | |
Date startDate = Const.convertServerDateToDate(Const.convertDateToUserTimeZone(item.getStartDate())); | |
String planDate = myDateFormat.format(startDate); | |
vholder.tvPlanDate.setVisibility(View.VISIBLE); | |
vholder.tvPlanDate.setText("Plan "+planDate); | |
vholder.imgView.setVisibility(View.VISIBLE); | |
if (item.getDueDate() != null) { | |
Timber.tag("ADAPTER").i("LOG TIME=>%s", Const.getActualTimeSlot(item.getDueDate())); | |
// vholder.tvActual.setText(Const.getActualTimeSlot(item.getDueDate())); | |
switch (Const.getActualTimeSlot(item.getDueDate())) { | |
case "A": | |
Glide.with(context) | |
.load(R.drawable.ic_task_a) | |
.into(vholder.imgView); | |
// vholder.imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_task_a)); | |
// vholder.tvActual.setBackgroundColor(ContextCompat.getColor(context, R.color.actual_a)); | |
break; | |
case "B": | |
Glide.with(context) | |
.load(R.drawable.ic_task_b) | |
.into(vholder.imgView); | |
// vholder.imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_task_b)); | |
// vholder.tvActual.setBackgroundColor(ContextCompat.getColor(context, R.color.actual_b)); | |
break; | |
case "C": | |
Glide.with(context) | |
.load(R.drawable.ic_task_c) | |
.into(vholder.imgView); | |
//vholder.imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_task_c)); | |
// vholder.tvActual.setBackgroundColor(ContextCompat.getColor(context, R.color.actual_c)); | |
break; | |
case "D": | |
Glide.with(context) | |
.load(R.drawable.ic_task_d) | |
.into(vholder.imgView); | |
//vholder.imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_task_d)); | |
// vholder.tvActual.setBackgroundColor(ContextCompat.getColor(context, R.color.actual_d)); | |
break; | |
} | |
} | |
} else { | |
vholder.tvPlanDate.setVisibility(View.INVISIBLE); | |
try { | |
Glide.with(context) | |
.load(R.drawable.ic_edit) | |
.into(vholder.imgView); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
if (isAllSelected) { | |
if (item.getEmployee().getFullname() != null) { | |
vholder.tvAssigned.setVisibility(View.VISIBLE); | |
vholder.tvAssigned.setText(item.getEmployee().getFullname()); | |
} else { | |
vholder.tvAssigned.setVisibility(View.GONE); | |
} | |
} else { | |
if (item.getAssignedby() != null && !item.getAssignedby().getID().equals("0")) { | |
vholder.tvAssigned.setVisibility(View.VISIBLE); | |
vholder.tvAssigned.setText(item.getAssignedby().getFullname()); | |
} else { | |
vholder.tvAssigned.setVisibility(View.GONE); | |
} | |
} | |
} else if (holder instanceof ProgressViewHolder) { | |
ProgressViewHolder loadingViewHolder = (ProgressViewHolder) holder; | |
loadingViewHolder.progressBar.setIndeterminate(true); | |
} | |
} | |
public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) { | |
this.onLoadMoreListener = onLoadMoreListener; | |
} | |
@Override | |
public int getItemCount() { | |
return mList == null ? 0 : mList.size(); | |
} | |
public void setLoaded() { | |
loading = false; | |
} | |
public class ItemViewHolder extends RecyclerView.ViewHolder { | |
public View View, topView, bottomView; | |
public TextView tvTask, tvAssigned, tvDate, tvPlanDate; | |
public ImageView imgView; | |
public LinearLayout itemLayout, addItem, headerLayout; | |
public ItemViewHolder(View v) { | |
super(v); | |
View = v; | |
// Add your UI Components here | |
tvTask = (TextView) v.findViewById(R.id.task_tv); | |
tvDate = (TextView) v.findViewById(R.id.date_tv); | |
tvPlanDate = (TextView) v.findViewById(R.id.planDate_tv); | |
headerLayout = (LinearLayout) v.findViewById(R.id.date_headerView); | |
// vholder.tvActual = (TextView) v.findViewById(R.id.actual_tv); | |
tvAssigned = (TextView) v.findViewById(R.id.assigned_by_tv); | |
addItem = (LinearLayout) v.findViewById(R.id.item_layout_add_task_layout); | |
imgView = (ImageView) v.findViewById(R.id.add_taskView); | |
itemLayout = (LinearLayout) v.findViewById(R.id.item_card); | |
topView = (View) v.findViewById(R.id.item_layout_top_view); | |
bottomView = (View) v.findViewById(R.id.item_layout_bottom_view); | |
} | |
} | |
private void showTimeLines(int position, AssignedTaskAdapter.ItemViewHolder vholder, TaskModel item) { | |
if (position <= mList.size() && mList.size() != 1) { | |
if (position != 0 && (position != mList.size() - 1)) { | |
final TaskModel premodel = mList.get(position - 1); | |
if (mList.get(position + 1) != null) { | |
final TaskModel postmodel = mList.get(position + 1); | |
String preModelDate = Const.convertServerDateToOnlyDate(premodel.getDueDate()) == null ? "" : Const.convertServerDateToOnlyDate(premodel.getDueDate()); | |
String postModelDate = Const.convertServerDateToOnlyDate(postmodel.getDueDate()) == null ? "" : Const.convertServerDateToOnlyDate(postmodel.getDueDate()); | |
Log.i("TAG", "ITEM POS=>" + position); | |
Log.i("TAG", "Size=>" + mList.size()); | |
String currentItemDate = Const.convertServerDateToOnlyDate(item.getDueDate()); | |
if (!preModelDate.equals(currentItemDate) && postModelDate.equals(currentItemDate)) { | |
vholder.headerLayout.setVisibility(View.VISIBLE); | |
vholder.tvDate.setText(Const.convertServerDateToOnlyUserDateDay(item.getDueDate())); | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.VISIBLE); | |
} else if (preModelDate.equals(currentItemDate) && postModelDate.equals(currentItemDate)) { | |
vholder.headerLayout.setVisibility(View.GONE); | |
vholder.topView.setVisibility(View.VISIBLE); | |
vholder.bottomView.setVisibility(View.VISIBLE); | |
} else if (preModelDate.equals(currentItemDate) && !postModelDate.equals(currentItemDate)) { | |
vholder.headerLayout.setVisibility(View.GONE); | |
vholder.topView.setVisibility(View.VISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} else if (!preModelDate.equals(currentItemDate) && !postModelDate.equals(currentItemDate)) { | |
vholder.headerLayout.setVisibility(View.VISIBLE); | |
vholder.tvDate.setText(Const.convertServerDateToOnlyUserDateDay(item.getDueDate())); | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} | |
} | |
} else { | |
if (position == 0) { | |
final TaskModel postmodel = mList.get(position + 1); | |
String postModelDate = Const.convertServerDateToOnlyDate(postmodel.getDueDate()); | |
String currentItemDate = Const.convertServerDateToOnlyDate(item.getDueDate()); | |
vholder.headerLayout.setVisibility(View.VISIBLE); | |
vholder.tvDate.setText(Const.convertServerDateToOnlyUserDateDay(item.getDueDate())); | |
if (postModelDate.equals(currentItemDate)) { | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.VISIBLE); | |
} else { | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} | |
} else { | |
final TaskModel premodel = mList.get(position - 1); | |
String preModelDate = Const.convertServerDateToOnlyDate(premodel.getDueDate()); | |
String currentItemDate = Const.convertServerDateToOnlyDate(item.getDueDate()); | |
if (preModelDate.equals(currentItemDate)) { | |
vholder.headerLayout.setVisibility(View.GONE); | |
vholder.topView.setVisibility(View.VISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} else { | |
vholder.headerLayout.setVisibility(View.VISIBLE); | |
vholder.tvDate.setText(Const.convertServerDateToOnlyUserDateDay(item.getDueDate())); | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} | |
} | |
} | |
} else { | |
vholder.headerLayout.setVisibility(View.VISIBLE); | |
vholder.tvDate.setText(Const.convertServerDateToOnlyUserDateDay(item.getDueDate())); | |
vholder.topView.setVisibility(View.INVISIBLE); | |
vholder.bottomView.setVisibility(View.INVISIBLE); | |
} | |
} | |
private class ProgressViewHolder extends RecyclerView.ViewHolder { | |
public ProgressBar progressBar; | |
public ProgressViewHolder(View v) { | |
super(v); | |
progressBar = (ProgressBar) v.findViewById(R.id.progressBar1); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment