Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.41 KB | None | 0 0
  1. public class NewsAdapterTest extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  2.  
  3. private ArrayList<NewsDataModel> dataSet;
  4. private Context context;
  5.  
  6. private final int VIEW_ITEM = 1;
  7. private final int VIEW_PROG = 0;
  8.  
  9. // The minimum amount of items to have below your current scroll position before loading more.
  10. private int visibleThreshold = 2;
  11. private int lastVisibleItem, totalItemCount;
  12. private boolean loading;
  13. private OnLoadMoreListener onLoadMoreListener;
  14.  
  15. public NewsAdapterTest(ArrayList<NewsDataModel> data, Context context, RecyclerView recyclerView) {
  16. this.dataSet = data;
  17. this.context = context;
  18.  
  19.  
  20. if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
  21.  
  22. final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
  23. recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
  24. @Override
  25. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  26. super.onScrolled(recyclerView, dx, dy);
  27.  
  28. totalItemCount = linearLayoutManager.getItemCount();
  29. lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
  30. if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
  31. // End has been reached
  32. // Do something
  33. Log.i("newsAdaptertest", "onScrolled: End reached");
  34. if (onLoadMoreListener != null) {
  35. onLoadMoreListener.onLoadMore();
  36. }
  37. loading = true;
  38. }
  39. }
  40. });
  41. }
  42.  
  43. }
  44.  
  45. public class MyViewHolder extends RecyclerView.ViewHolder {
  46. ExpandableTextView postMessage;
  47. TextView postTitle;
  48. TextView postSubTitle;
  49. ImageView authorImage;
  50.  
  51. public MyViewHolder(View itemView) {
  52. super(itemView);
  53. this.authorImage = (ImageView) itemView.findViewById(R.id.header_image);
  54. this.postTitle = (TextView) itemView.findViewById(R.id.header_title);
  55. this.postSubTitle = (TextView) itemView.findViewById(R.id.header_subtitle);
  56. this.postMessage = (ExpandableTextView) itemView.findViewById(R.id.post_text_expand);
  57. }
  58. }
  59.  
  60. @Override
  61. public int getItemCount() {
  62. return dataSet.size();
  63. }
  64.  
  65. @Override
  66. public int getItemViewType(int position) {
  67. return dataSet.get(position) != null ? VIEW_ITEM : VIEW_PROG;
  68. }
  69.  
  70. @Override
  71. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  72. RecyclerView.ViewHolder vh;
  73. if (viewType == VIEW_ITEM) {
  74. View v = LayoutInflater.from(parent.getContext())
  75. .inflate(R.layout.recycler_news, parent, false);
  76.  
  77. vh = new MyViewHolder(v);
  78. } else {
  79. View v = LayoutInflater.from(parent.getContext())
  80. .inflate(R.layout.recycler_progress, parent, false);
  81.  
  82. vh = new ProgressViewHolder(v);
  83. }
  84. return vh;
  85. }
  86.  
  87. @Override
  88. public void onBindViewHolder(RecyclerView.ViewHolder holder, int listPosition) {
  89. if (holder instanceof MyViewHolder) {
  90. Binding Views...
  91. } else {
  92. ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
  93. }
  94. }
  95.  
  96. public void setLoaded() {
  97. loading = false;
  98. }
  99.  
  100. public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
  101. this.onLoadMoreListener = onLoadMoreListener;
  102. }
  103.  
  104. public interface OnLoadMoreListener {
  105. void onLoadMore();
  106. }
  107.  
  108. public static class ProgressViewHolder extends RecyclerView.ViewHolder {
  109. public ProgressBar progressBar;
  110.  
  111. public ProgressViewHolder(View v) {
  112. super(v);
  113. progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
  114. }
  115. }
  116.  
  117. }
  118.  
  119. private static NewsAdapterTest adapter;
  120. private LinearLayoutManager layoutManager;
  121. private static RecyclerView recyclerView;
  122. private ArrayList<NewsDataModel> data = new ArrayList<NewsDataModel>();
  123.  
  124. recyclerView = (RecyclerView) findViewById(R.id.recyclerview_news);
  125. layoutManager = new LinearLayoutManager(this);
  126. adapter = new NewsAdapterTest(data, NewsActivity.this, recyclerView);
  127.  
  128. recyclerView.setHasFixedSize(false);
  129. recyclerView.setLayoutManager(layoutManager);
  130. recyclerView.setItemAnimator(new DefaultItemAnimator());
  131.  
  132. adapter.setOnLoadMoreListener(new NewsAdapterTest.OnLoadMoreListener() {
  133. @Override
  134. public void onLoadMore() {
  135. Log.i(TAG, "onLoadMore called");
  136. //add progress item
  137. data.add(null);
  138. adapter.notifyItemInserted(data.size() - 1);
  139.  
  140. Log.i(TAG, "Loading new data... (" + Integer.toString(loadNumber) + ") posts");
  141. loadPosts(startLoadPosition, loadNumber);
  142. startLoadPosition += loadNumber;
  143.  
  144. //remove progress item
  145. data.remove(data.size() - 1);
  146. adapter.notifyItemRemoved(data.size());
  147. //add items one by one
  148.  
  149. adapter.setLoaded();
  150. //or you can add all at once but do not forget to call mAdapter.notifyDataSetChanged();
  151. }
  152. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement