Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.51 KB | None | 0 0
  1. public class FoodMenuRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  2.  
  3. List<FoodMenuItem> foodMenuItems;
  4. List<Object> objects;
  5. FoodMenuParentListener foodMenuParentListener;
  6. boolean isAddAllowed;
  7. int expandIndex = -1;
  8.  
  9. boolean isVegOnly;
  10. final int TYPE_FOOD = 0;
  11. final int TYPE_MENU_ITEM = 1;
  12.  
  13.  
  14. public FoodMenuRecyclerAdapter(List<FoodMenuItem> foodMenuItems, FoodMenuParentListener foodMenuParentListener, boolean isVegOnly, boolean isAddAllowed) {
  15. this.foodMenuItems = foodMenuItems;
  16. this.foodMenuParentListener = foodMenuParentListener;
  17. this.isVegOnly = isVegOnly;
  18. this.isAddAllowed = isAddAllowed;
  19. objects = new ArrayList<>();
  20. for (FoodMenuItem foodMenuItem : foodMenuItems) {
  21. objects.add(foodMenuItem);
  22. objects.addAll(foodMenuItem.getItems());
  23. }
  24.  
  25. }
  26.  
  27. @Override
  28. public int getItemViewType(int position) {
  29. Object object = objects.get(position);
  30. if (object instanceof FoodMenuItem) {
  31. return TYPE_FOOD;
  32. } else {
  33. return TYPE_MENU_ITEM;
  34. }
  35. }
  36.  
  37. @NonNull
  38. @Override
  39. public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  40. View view;
  41. switch (getItemViewType(i)) {
  42. case TYPE_FOOD:
  43. view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_food_parent, viewGroup, false);
  44. return new MenuViewHolder(view);
  45. case TYPE_MENU_ITEM:
  46. view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_food_child, viewGroup, false);
  47. return new ChildMenuHolder(view);
  48. default:
  49. throw new IllegalArgumentException("Invalid viewType");
  50.  
  51. }
  52. }
  53.  
  54. @Override
  55. public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
  56. Object object = objects.get(i);
  57. if (getItemViewType(i) == TYPE_MENU_ITEM) {
  58. ChildMenuHolder childMenuHolder = (ChildMenuHolder) viewHolder;
  59. Context context = viewHolder.itemView.getContext();
  60.  
  61. Item item = (Item) object;
  62.  
  63. childMenuHolder.tvTitle.setText(item.getTitle());
  64. childMenuHolder.txtQty.setText(String.valueOf(item.getQuatity()));
  65. childMenuHolder.txtCartInc.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
  66. childMenuHolder.txtQty.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
  67. childMenuHolder.txtCartDec.setVisibility(item.isAddedToCart() ? View.VISIBLE : View.GONE);
  68. childMenuHolder.btnAdd.setVisibility(!item.isAddedToCart() ? View.VISIBLE : View.GONE);
  69. childMenuHolder.btnAdd.setBackgroundResource(isAddAllowed ? R.drawable.rounded_bottom_edge_shape_food : R.drawable.rounded_bottom_edge_shape_disable);
  70. childMenuHolder.btnAdd.setTextColor(isAddAllowed ? ContextCompat.getColor(context, R.color.button_green) : ContextCompat.getColor(context, R.color.gray_a1));
  71. childMenuHolder.ivType.setColorFilter(item.getType().equalsIgnoreCase(Item.FOOD_TYPE_VEG) ? ContextCompat.getColor(context, R.color.selected_green) : ContextCompat.getColor(context, R.color.app_red));
  72.  
  73.  
  74. } else {
  75. FoodMenuItem foodMenuItem = (FoodMenuItem) object;
  76. MenuViewHolder menuViewHolder = (MenuViewHolder) viewHolder;
  77. //menuViewHolder.rvMenu.setLayoutManager(new LinearLayoutManager(viewHolder.itemView.getContext(), LinearLayoutManager.VERTICAL, false));
  78. if (isVegOnly) {
  79. List<Item> items = new ArrayList<>();
  80. for (Item item : foodMenuItem.getItems()) {
  81. if (item.getType().equalsIgnoreCase(Item.FOOD_TYPE_VEG)) {
  82. items.add(item);
  83. }
  84. }
  85. menuViewHolder.tvNumItems.setText("(" + items.size() + " items)");
  86.  
  87. } else {
  88. menuViewHolder.tvNumItems.setText("(" + foodMenuItem.getItems().size() + " items)");
  89.  
  90. }
  91. menuViewHolder.ivArrow.setImageResource(foodMenuItem.isExpanded() ? R.drawable.chev_up : R.drawable.chev_down);
  92. menuViewHolder.tvTitle.setText(foodMenuItem.getCategoryName());
  93. }
  94.  
  95.  
  96. }
  97.  
  98.  
  99. @Override
  100. public int getItemCount() {
  101. return objects.size();
  102. }
  103.  
  104. public class MenuViewHolder extends RecyclerView.ViewHolder {
  105. TextView tvTitle;
  106. TextView tvNumItems;
  107. ImageView ivArrow;
  108. // RecyclerView rvMenu;
  109. View rlArrow;
  110.  
  111. public MenuViewHolder(@NonNull View itemView) {
  112. super(itemView);
  113. tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
  114. tvNumItems = (TextView) itemView.findViewById(R.id.tvNumItems);
  115. ivArrow = (ImageView) itemView.findViewById(R.id.ivArrow);
  116. // rvMenu.setNestedScrollingEnabled(false);
  117. rlArrow = itemView.findViewById(R.id.rlArrow);
  118. rlArrow.setOnClickListener(new View.OnClickListener() {
  119. @Override
  120. public void onClick(View view) {
  121. if (foodMenuParentListener != null) {
  122. Object object = objects.get(getAdapterPosition());
  123. if (object instanceof FoodMenuItem) {
  124. FoodMenuItem foodMenuItem = (FoodMenuItem) object;
  125. foodMenuParentListener.OnExpandClick(foodMenuItem, getAdapterPosition());
  126.  
  127. }
  128. }
  129. }
  130. });
  131. tvTitle.setOnClickListener(new View.OnClickListener() {
  132. @Override
  133. public void onClick(View view) {
  134. if (foodMenuParentListener != null) {
  135. Object object = objects.get(getAdapterPosition());
  136. if (object instanceof FoodMenuItem) {
  137. FoodMenuItem foodMenuItem = (FoodMenuItem) object;
  138. foodMenuParentListener.OnExpandClick(foodMenuItem, getAdapterPosition());
  139.  
  140. }
  141. }
  142. }
  143. });
  144. }
  145. }
  146.  
  147. public boolean isVegOnly() {
  148. return isVegOnly;
  149. }
  150.  
  151. public void setVegOnly(boolean vegOnly) {
  152. isVegOnly = vegOnly;
  153. }
  154.  
  155. public interface FoodMenuParentListener extends AddItemListener {
  156. public void OnExpandClick(FoodMenuItem foodMenuItem, int position);
  157.  
  158. public void OnVegOnlyClicked();
  159. }
  160.  
  161. public class ChildMenuHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  162. ImageView ivType;
  163. TextView tvTitle;
  164. TextView tvPrice;
  165. TextView txtCartDec;
  166. TextView txtQty;
  167. TextView txtCartInc;
  168.  
  169. Button btnAdd;
  170.  
  171. public ChildMenuHolder(@NonNull View itemView) {
  172. super(itemView);
  173. ivType = (ImageView) itemView.findViewById(R.id.ivType);
  174. tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
  175. tvPrice = (TextView) itemView.findViewById(R.id.tvPrice);
  176. txtCartDec = (TextView) itemView.findViewById(R.id.txtCartDec);
  177. txtQty = (TextView) itemView.findViewById(R.id.txtQty);
  178. txtCartInc = (TextView) itemView.findViewById(R.id.txtCartInc);
  179. btnAdd = (Button) itemView.findViewById(R.id.btnAdd);
  180. btnAdd.setOnClickListener(this);
  181. txtCartInc.setOnClickListener(this);
  182. txtCartDec.setOnClickListener(this);
  183. }
  184.  
  185. @Override
  186. public void onClick(View view) {
  187.  
  188. }
  189. }
  190.  
  191. public void setExpandIndex(int expandIndex) {
  192. }
  193.  
  194. public boolean isItemExpanded(int position) {
  195. return true;
  196. }
  197.  
  198. public List<FoodMenuItem> getFoodMenuItems() {
  199. return foodMenuItems;
  200. }
  201.  
  202. public void setFoodMenuItems(List<FoodMenuItem> foodMenuItems) {
  203. this.foodMenuItems = foodMenuItems;
  204. }
  205.  
  206. public class VegOnlyViewHolder extends RecyclerView.ViewHolder {
  207. Switch wtVeg;
  208.  
  209. public VegOnlyViewHolder(@NonNull View itemView) {
  210. super(itemView);
  211. wtVeg = (Switch) itemView.findViewById(R.id.wtVeg);
  212. wtVeg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  213. @Override
  214. public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
  215. if (foodMenuParentListener != null) {
  216. foodMenuParentListener.OnVegOnlyClicked();
  217. }
  218. }
  219. });
  220. }
  221. }
  222.  
  223.  
  224. public interface AddItemListener {
  225. public void onAddClicked(Item item, int parentIndex);
  226.  
  227. public void increaseItemCount(Item item, int parentIndex);
  228.  
  229. public void decreaseItemCount(Item item, int parentIndex);
  230. }
  231.  
  232. public void addAll(int position, List<Item> objects) {
  233. this.objects.addAll(position, objects);
  234. }
  235.  
  236. public void addItem(int position, Item object) {
  237. this.objects.add(position, object);
  238. }
  239. public void removeItem(Object object) {
  240. this.objects.remove(object);
  241. }
  242.  
  243.  
  244. public void removeAll(List<Item> objects) {
  245. this.objects.removeAll(objects);
  246. }
  247.  
  248. public Object isItemInList(Item item) {
  249. for (Object object : objects) {
  250. if (object instanceof Item && ((Item) object).getId().equals(item.getId())) {
  251. return object;
  252. }
  253. }
  254. return null;
  255. }
  256. }
  257.  
  258. public void OnExpandClick(FoodMenuItem foodMenuItem, int position) {
  259. if (recyclerViewMenu != null && recyclerViewMenu.getAdapter() != null) {
  260. FoodMenuRecyclerAdapter foodMenuRecyclerAdapter = (FoodMenuRecyclerAdapter) recyclerViewMenu.getAdapter();
  261. foodMenuItem.setExpanded(!foodMenuItem.isExpanded());
  262. if (foodMenuItem.isExpanded()) {
  263. foodMenuRecyclerAdapter.addAll(position + 1, foodMenuItem.getItems());
  264. foodMenuRecyclerAdapter.notifyItemRangeInserted(position, foodMenuItem.getItems().size());
  265.  
  266. } else {
  267. foodMenuRecyclerAdapter.removeAll(foodMenuItem.getItems());
  268. foodMenuRecyclerAdapter.notifyItemRangeRemoved(position +1 , foodMenuItem.getItems().size());
  269.  
  270. }
  271.  
  272. }
  273.  
  274. }
  275.  
  276. java.lang.ClassCastException: com.myapp.android.pojoentities.Item cannot be cast to com.myapp.android.pojoentities.FoodMenuItem
  277. at com.myapp.android.food.menu.FoodMenuRecyclerAdapter.onBindViewHolder(FoodMenuRecyclerAdapter.java:104)
  278. at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
  279. at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
  280. at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
  281. at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
  282. at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
  283. at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
  284. at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
  285. at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
  286. at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
  287. at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
  288. at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3875)
  289. at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3639)
  290. at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4194)
  291. at android.view.View.layout(View.java:16636)
  292. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  293. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
  294. at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
  295. at android.view.View.layout(View.java:16636)
  296. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  297. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
  298. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
  299. at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
  300. at android.view.View.layout(View.java:16636)
  301. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  302. at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1183)
  303. at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:870)
  304. at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:889)
  305. at android.view.View.layout(View.java:16636)
  306. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  307. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
  308. at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
  309. at com.myapp.android.custom.FitsSystemWindowsFrameLayout.onLayout(FitsSystemWindowsFrameLayout.java:247)
  310. at android.view.View.layout(View.java:16636)
  311. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  312. at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
  313. at android.view.View.layout(View.java:16636)
  314. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  315. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
  316. at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
  317. at android.view.View.layout(View.java:16636)
  318. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  319. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
  320. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
  321. at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
  322. at android.view.View.layout(View.java:16636)
  323. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  324. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
  325. at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
  326. at android.view.View.layout(View.java:16636)
  327. at android.view.ViewGroup.layout(ViewGroup.java:5437)
  328. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
  329. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
  330. at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
  331. at android.view.View.layout(View.java:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement