Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.47 KB | None | 0 0
  1. package com.app.notch.adapter;
  2.  
  3. import android.content.Context;
  4. import android.support.annotation.NonNull;
  5. import android.support.v7.widget.LinearLayoutManager;
  6. import android.support.v7.widget.LinearSnapHelper;
  7. import android.support.v7.widget.RecyclerView;
  8. import android.util.Log;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.ImageView;
  13. import android.widget.ProgressBar;
  14. import android.widget.TextView;
  15.  
  16. import com.app.notch.R;
  17. import com.app.notch.data.Constant;
  18. import com.app.notch.model.News;
  19. import com.app.notch.model.Section;
  20. import com.app.notch.model.Topic;
  21. import com.app.notch.model.TopicList;
  22. import com.app.notch.utils.StartSnapHelper;
  23. import com.app.notch.utils.TimeAgo;
  24. import com.app.notch.utils.Tools;
  25.  
  26. import java.util.ArrayList;
  27. import java.util.List;
  28.  
  29. public class AdapterHome extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  30.  
  31. private static final int VIEW_PROGRESS = 0;
  32. private static final int VIEW_ITEM_NEWS = 100;
  33. private static final int VIEW_ITEM_TOPIC = 200;
  34. private static final int VIEW_ITEM_SECTION = 300;
  35.  
  36. private List items = new ArrayList<>();
  37.  
  38. private boolean loading;
  39. private OnLoadMoreListener onLoadMoreListener;
  40.  
  41. private Context ctx;
  42. private OnItemClickListener onItemClickListener;
  43.  
  44. public interface OnItemClickListener {
  45. void onItemNewsClick(View view, News obj, int position);
  46.  
  47. void onItemTopicClick(View view, Topic obj, int position);
  48. }
  49.  
  50. public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
  51. this.onItemClickListener = mItemClickListener;
  52. }
  53.  
  54. // Provide a suitable constructor (depends on the kind of dataset)
  55. public AdapterHome(Context context, RecyclerView view) {
  56. ctx = context;
  57. lastItemViewDetector(view);
  58. }
  59.  
  60. public static class ProgressViewHolder extends RecyclerView.ViewHolder {
  61. public ProgressBar progressBar;
  62.  
  63. public ProgressViewHolder(View v) {
  64. super(v);
  65. progressBar = v.findViewById(R.id.progress_loading);
  66. }
  67. }
  68.  
  69. public class ItemNewsViewHolder extends RecyclerView.ViewHolder {
  70. public TextView title;
  71. public TextView date;
  72. public TextView featured;
  73. public ImageView image;
  74. public ImageView img_type;
  75. public TextView txt_type;
  76. public View lyt_parent;
  77.  
  78. public ItemNewsViewHolder(View v) {
  79. super(v);
  80. title = v.findViewById(R.id.title);
  81. date = v.findViewById(R.id.date);
  82. featured = v.findViewById(R.id.featured);
  83. image = v.findViewById(R.id.image);
  84. img_type = v.findViewById(R.id.img_type);
  85. txt_type = v.findViewById(R.id.txt_type);
  86. lyt_parent = v.findViewById(R.id.lyt_parent);
  87. }
  88. }
  89.  
  90. public static class ItemTopicViewHolder extends RecyclerView.ViewHolder {
  91. public TextView title;
  92. public RecyclerView recycler_view;
  93.  
  94. public ItemTopicViewHolder(View v) {
  95. super(v);
  96. title = v.findViewById(R.id.title);
  97. recycler_view = v.findViewById(R.id.recycler_view);
  98. }
  99. }
  100.  
  101. public static class ItemSectionViewHolder extends RecyclerView.ViewHolder {
  102. public TextView title;
  103.  
  104. public ItemSectionViewHolder(View v) {
  105. super(v);
  106. title = v.findViewById(R.id.title);
  107. }
  108. }
  109.  
  110. @Override
  111. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  112. RecyclerView.ViewHolder vh;
  113. if (viewType == VIEW_ITEM_NEWS) {
  114. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_news, parent, false);
  115. vh = new ItemNewsViewHolder(v);
  116. } else if (viewType == VIEW_ITEM_TOPIC) {
  117. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_section_topic_home, parent, false);
  118. vh = new ItemTopicViewHolder(v);
  119. } else if (viewType == VIEW_ITEM_SECTION) {
  120. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_section_title, parent, false);
  121. vh = new ItemSectionViewHolder(v);
  122. } else {
  123. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_loading, parent, false);
  124. vh = new ProgressViewHolder(v);
  125. }
  126. return vh;
  127. }
  128.  
  129. // Replace the contents of a view (invoked by the layout manager)
  130. @Override
  131. public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
  132. Object obj = items.get(position);
  133. if (holder instanceof ProgressViewHolder) {
  134. ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
  135. } else if (holder instanceof ItemNewsViewHolder) {
  136. final News news = (News) obj;
  137. ItemNewsViewHolder v = (ItemNewsViewHolder) holder;
  138. v.title.setText(news.title);
  139. v.date.setText(TimeAgo.get(ctx, news.date));
  140. Tools.displayImageThumb(ctx, v.image, Constant.getURLimgNews(news.image), 0.5f);
  141. v.featured.setVisibility(news.featured == 1 ? View.VISIBLE : View.GONE);
  142. if (news.type.equalsIgnoreCase("GALLERY")) {
  143. v.img_type.setImageResource(R.drawable.ic_type_gallery);
  144. v.txt_type.setText(R.string.news_type_gallery);
  145. } else if (news.type.equalsIgnoreCase("VIDEO")) {
  146. v.img_type.setImageResource(R.drawable.ic_type_video);
  147. v.txt_type.setText(R.string.news_type_video);
  148. } else {
  149. v.img_type.setImageResource(R.drawable.ic_type_article);
  150. v.txt_type.setText(R.string.news_type_article);
  151. }
  152. v.lyt_parent.setOnClickListener(new View.OnClickListener() {
  153. @Override
  154. public void onClick(View view) {
  155. if (onItemClickListener != null) {
  156. onItemClickListener.onItemNewsClick(view, news, position);
  157. }
  158. }
  159. });
  160. } else if (holder instanceof ItemTopicViewHolder) {
  161. TopicList topic = (TopicList) obj;
  162. ItemTopicViewHolder v = (ItemTopicViewHolder) holder;
  163.  
  164. v.recycler_view.setLayoutManager(new LinearLayoutManager(ctx, LinearLayoutManager.HORIZONTAL, false));
  165. //set data and list adapter
  166. AdapterTopicHome mAdapter = new AdapterTopicHome(ctx, topic.topics);
  167. v.recycler_view.setAdapter(mAdapter);
  168. v.recycler_view.setOnFlingListener(null);
  169. v.recycler_view.addOnScrollListener(new RecyclerView.OnScrollListener() {
  170. @Override
  171. public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
  172. super.onScrollStateChanged(recyclerView, newState);
  173. Log.e("SCROLL", newState+"");
  174. }
  175. });
  176. new LinearSnapHelper().attachToRecyclerView(v.recycler_view);
  177.  
  178. mAdapter.setOnItemClickListener(new AdapterTopicHome.OnItemClickListener() {
  179. @Override
  180. public void onItemClick(View view, Topic obj, int position) {
  181. if (onItemClickListener != null) {
  182. onItemClickListener.onItemTopicClick(view, obj, position);
  183. }
  184. }
  185. });
  186.  
  187. } else if (holder instanceof ItemSectionViewHolder) {
  188. Section section = (Section) obj;
  189. ItemSectionViewHolder v = (ItemSectionViewHolder) holder;
  190. v.title.setText(section.title);
  191. }
  192. }
  193.  
  194. // Return the size of your data set (invoked by the layout manager)
  195. @Override
  196. public int getItemCount() {
  197. return items.size();
  198. }
  199.  
  200. @Override
  201. public int getItemViewType(int position) {
  202. Object obj = items.get(position);
  203. if (obj instanceof News) {
  204. return VIEW_ITEM_NEWS;
  205. } else if (obj instanceof TopicList) {
  206. return VIEW_ITEM_TOPIC;
  207. } else if (obj instanceof Section) {
  208. return VIEW_ITEM_SECTION;
  209. } else {
  210. return VIEW_PROGRESS;
  211. }
  212. }
  213.  
  214. public void insertData(List items) {
  215. setLoaded();
  216. int positionStart = getItemCount();
  217. int itemCount = items.size();
  218. this.items.addAll(items);
  219. notifyItemRangeInserted(positionStart, itemCount);
  220. }
  221.  
  222. public void addData(Object items) {
  223. setLoaded();
  224. int positionStart = getItemCount();
  225. this.items.add(items);
  226. notifyItemInserted(positionStart);
  227. }
  228.  
  229. public void setLoaded() {
  230. loading = false;
  231. for (int i = 0; i < getItemCount(); i++) {
  232. if (items.get(i) == null) {
  233. items.remove(i);
  234. notifyItemRemoved(i);
  235. return;
  236. }
  237. }
  238. }
  239.  
  240. public void setLoading() {
  241. if (getItemCount() != 0) {
  242. this.items.add(null);
  243. notifyItemInserted(getItemCount() - 1);
  244. loading = true;
  245. }
  246. }
  247.  
  248. public void resetListData() {
  249. this.items = new ArrayList<>();
  250. notifyDataSetChanged();
  251. }
  252.  
  253. public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
  254. this.onLoadMoreListener = onLoadMoreListener;
  255. }
  256.  
  257. private void lastItemViewDetector(RecyclerView recyclerView) {
  258. if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
  259. final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
  260. recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
  261. @Override
  262. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  263. super.onScrolled(recyclerView, dx, dy);
  264. int lastPos = layoutManager.findLastVisibleItemPosition();
  265. if (!loading && lastPos == getItemCount() - 1 && onLoadMoreListener != null) {
  266. if (onLoadMoreListener != null) {
  267. onLoadMoreListener.onLoadMore();
  268. }
  269. loading = true;
  270. }
  271. }
  272. });
  273. }
  274. }
  275.  
  276. public interface OnLoadMoreListener {
  277. void onLoadMore();
  278. }
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement