void OnGroupClick2(object sender, int pos) { ExpertGroupData2 groupSelect = (ExpertGroupData2)listItems[pos]; #region closing EntryData items if (groupSelect.items.Count == 0) { int count = 0; while (listItems.Count > pos + 1 && listItems[pos + 1].GetItemType() == 1) { groupSelect.items.Add(listItems[pos + 1]); listItems.RemoveAt(pos + 1); recyclerAdapter.NotifyItemRemoved(pos + 1); count++; } } #endregion closing EntryData items #region opening EntryData items else { int index = pos + 1; foreach (ExpertEntryData entryNode in groupSelect.items) { listItems.Insert(index, entryNode); recyclerAdapter.NotifyItemInserted(index); index++; } groupSelect.items.Clear(); int last_group_index = 0; int count = 0; foreach (var item in ThreeLevelExpertProfileAdapter.listItems) { if (item is ExpertGroupData2) { last_group_index = count; } count++; } if (pos == last_group_index) { recyclerView.SmoothScrollToPosition(ThreeLevelExpertProfileAdapter.listItems.Capacity - 1); } } #endregion opening EntryData items }
private void initData() { this.listItems = new List <IExpertProfileDataType>(); listItems.Add(new ExpertGroupData( deserialized_expert_profile.id, deserialized_expert_profile.fullName, deserialized_expert_profile.phone, deserialized_expert_profile.aboutExpert, deserialized_expert_profile.rating, deserialized_expert_profile.distance, deserialized_expert_profile.city.name, deserialized_expert_profile.online, deserialized_expert_profile.avatarUrl, null)); foreach (var data in deserialized_expert_profile.mainCategories) { var spec_obj = new ExpertGroupData(null, null, null, null, null, null, null, false, null, data.name); if (data.subcategories != null) { foreach (var subcategory in data.subcategories) { var subcat_obj = new ExpertGroupData2(subcategory.name); var entry_obj = new ExpertEntryData(subcategory.description, subcategory.services, subcategory.photos); subcat_obj.items.Add(entry_obj); spec_obj.items.Add(subcat_obj); } } listItems.Add(spec_obj); } Typeface tf = Typeface.CreateFromAsset(Assets, "Roboto-Regular.ttf"); recyclerAdapter = new ThreeLevelExpertProfileAdapter(this, this, tf, listItems); recyclerAdapter.GroupClick += OnGroupClick; recyclerAdapter.GroupClick2 += OnGroupClick2; recyclerAdapter.BttEntryClick += OnBttEntryClick; this.mLayoutManager = new LinearLayoutManager(this); recyclerView.SetLayoutManager(mLayoutManager); recyclerView.SetAdapter(recyclerAdapter); }
void OnGroupClick(object sender, int pos) { ExpertGroupData groupSelect = (ExpertGroupData)listItems[pos]; #region closing all subitems if (groupSelect.items.Count == 0) { bool is_cur_header_item11111 = true; //loop to close EntryData items for (int i = pos; i < listItems.Count; i++) { try { var current_item = (ExpertGroupData)listItems[i]; if (!is_cur_header_item11111) { break; } is_cur_header_item11111 = false; } catch { try { ExpertGroupData2 groupSelect2 = (ExpertGroupData2)listItems[i]; #region closing EntryData items if (groupSelect2.items.Count == 0) { int count = 0; while (listItems.Count > i + 1 && listItems[i + 1].GetItemType() == 1) { groupSelect2.items.Add(listItems[i + 1]); listItems.RemoveAt(i + 1); recyclerAdapter.NotifyItemRemoved(i + 1); count++; } } #endregion closing EntryData items } catch { } } } var indexes_to_remove = new List <int>(); bool is_cur_header_item = true; //loop to close GreoupData2 items for (int i = pos; i < listItems.Count; i++) { try { var current_item = (ExpertGroupData)listItems[i]; if (!is_cur_header_item) { break; } is_cur_header_item = false; } catch { try { var current_item = (ExpertGroupData2)listItems[i]; groupSelect.items.Add(listItems[pos + 1]); listItems.RemoveAt(pos + 1); recyclerAdapter.NotifyItemRemoved(pos + 1); i--; } catch { } } } } #endregion closing closing all subitems #region opening GroupData2 group items (they are subitems to main group (GroupData) items) else { int index = pos + 1; foreach (ExpertGroupData2 entryNode in groupSelect.items) { listItems.Insert(index, entryNode); recyclerAdapter.NotifyItemInserted(index); index++; } groupSelect.items.Clear(); int last_group_index = 0; int count = 0; foreach (var item in ThreeLevelExpertProfileAdapter.listItems) { if (item is ExpertGroupData) { last_group_index = count; } count++; } if (pos == last_group_index) { recyclerView.SmoothScrollToPosition(ThreeLevelExpertProfileAdapter.listItems.Capacity - 1); } } #endregion opening GroupData2 group items (they are subitems to main group (GroupData) items) }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { IExpertProfileDataType itemNode = listItems[position]; if (itemNode.GetItemType() == 0) { ExpertGroupData group = itemNode as ExpertGroupData; GroupExpertThreeLevelHolder groupHolder = holder as GroupExpertThreeLevelHolder; if (position == 0) { AboutExpertActivity.InfoText = group.aboutExpertInfo; groupHolder.headerRL.Visibility = ViewStates.Visible; groupHolder.itemRL.Visibility = ViewStates.Gone; groupHolder.expertNameTV.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.expertSurnameTV.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.expert_phoneTV.SetTypeface(tf, TypefaceStyle.Normal); groupHolder.aboutExpertTitle.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.aboutExpertInfo.SetTypeface(tf, TypefaceStyle.Normal); groupHolder.writeTV.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.callTV.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.cityTV.SetTypeface(tf, TypefaceStyle.Normal); groupHolder.nowTitle.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.distanceTV.SetTypeface(tf, TypefaceStyle.Normal); groupHolder.rating_valueTV.SetTypeface(tf, TypefaceStyle.Bold); groupHolder.expert_phoneTV.Text = group.expert_phone; char[] chars = { ' ' }; string[] split = group.expertName.Split(chars); try { string name = split[0]; string middlename = split[1]; groupHolder.expertNameTV.Text = name + " " + middlename; groupHolder.expertSurnameTV.Text = split[2]; } catch { groupHolder.expertNameTV.Text = group.expertName; groupHolder.expertNameTV.Visibility = ViewStates.Visible; } Thread backgroundThread = new Thread(new ThreadStart(() => { Glide.Get(Application.Context).ClearDiskCache(); })); backgroundThread.IsBackground = true; backgroundThread.Start(); Glide.Get(context).ClearMemory(); Glide.With(Application.Context) .Load("https://api.iamnearby.net/" + group.profile_image) .Apply(new Com.Bumptech.Glide.Request.RequestOptions() .SkipMemoryCache(true)) //.Placeholder(Resource.Drawable.specialization_imageIV) .Into(groupHolder.profile_image); groupHolder.cityTV.Text = group.city; if (group.online) { groupHolder.onlineIV.Visibility = ViewStates.Visible; } else { groupHolder.onlineIV.Visibility = ViewStates.Gone; } double distance_in_km; bool distance_in_km_parsed = Double.TryParse(group.distance, out distance_in_km); if (distance_in_km > 999) { distance_in_km = distance_in_km / 1000; var final_dist = Math.Round(distance_in_km, 2).ToString().Replace(',', '.'); groupHolder.distanceTV.Text = final_dist + " км"; } else { groupHolder.distanceTV.Text = group.distance + " м"; } if (!String.IsNullOrEmpty(group.aboutExpertInfo)) { groupHolder.aboutExpertRL.Visibility = ViewStates.Visible; groupHolder.aboutExpertInfo.Text = group.aboutExpertInfo; } else { groupHolder.aboutExpertRL.Visibility = ViewStates.Gone; } groupHolder.rating_valueTV.Text = "(" + group.rating_value.ToString() + ")"; double rating_value = 0; try { rating_value = Convert.ToDouble(group.rating_value, (CultureInfo.InvariantCulture)); if (rating_value >= 1) { groupHolder.star1IV.SetBackgroundResource(Resource.Drawable.active_star); if (rating_value >= 2) { groupHolder.star2IV.SetBackgroundResource(Resource.Drawable.active_star); if (rating_value >= 3) { groupHolder.star3IV.SetBackgroundResource(Resource.Drawable.active_star); if (rating_value >= 4) { groupHolder.star4IV.SetBackgroundResource(Resource.Drawable.active_star); if (rating_value >= 5) { groupHolder.star5IV.SetBackgroundResource(Resource.Drawable.active_star); } } } } } } catch { } } else { groupHolder.headerRL.Visibility = ViewStates.Gone; groupHolder.itemRL.Visibility = ViewStates.Visible; groupHolder.skillNameTV.Text = group.upper_categ; groupHolder.skillNameTV.SetTypeface(tf, TypefaceStyle.Bold); } } else if (itemNode.GetItemType() == 1) { ExpertEntryData entry = itemNode as ExpertEntryData; holderEntry = holder as EntryHolder; holderEntry.descriptionTitleTV.SetTypeface(tf, TypefaceStyle.Bold); holderEntry.description_text_dataTV.SetTypeface(tf, TypefaceStyle.Normal); holderEntry.services_and_pricesTV.SetTypeface(tf, TypefaceStyle.Bold); holderEntry.portfolioTitleTV.SetTypeface(tf, TypefaceStyle.Bold); if (!String.IsNullOrEmpty(entry.description)) { holderEntry.description_text_dataTV.Text = entry.description; } else { holderEntry.description_text_dataTV.Text = _context.GetString(Resource.String.no_data); } holderEntry.layoutManager_services = new LinearLayoutManager(this.context, LinearLayoutManager.Vertical, false); holderEntry.recyclerViewServices.SetLayoutManager(holderEntry.layoutManager_services); var serv_temp_list = new List <ServiceData>(); if (entry.services != null) { holderEntry.recyclerViewServices.Visibility = ViewStates.Visible; holderEntry.services_and_pricesTV.Visibility = ViewStates.Visible; foreach (var d in entry.services) { serv_temp_list.Add(new ServiceData() { name = d.name, price = d.price }); } } else { holderEntry.recyclerViewServices.Visibility = ViewStates.Gone; holderEntry.services_and_pricesTV.Visibility = ViewStates.Gone; } var services_and_pricesAdapter = new ServicesAndPricesForExpertAdapter(serv_temp_list, _context, tf); holderEntry.recyclerViewServices.SetAdapter(services_and_pricesAdapter); holderEntry.portfolio_layoutManager = new LinearLayoutManager(this.context, LinearLayoutManager.Horizontal, false); holderEntry.portfolio_recyclerView.SetLayoutManager(holderEntry.portfolio_layoutManager); try { var image_list = new List <string>(); int count_ = 0; if (entry.photos == null) { count_ = 0; } else { count_ = entry.photos.Count; int i = 0; foreach (var img in entry.photos) { var current_img = JsonConvert.DeserializeObject <CategoryImage>(entry.photos[i].ToString()); image_list.Add(current_img.imageUrl); i++; if (i == count_) { break; } } } var portfolioAdapter = new PortfolioExpertAdapter(image_list, _context); holderEntry.portfolio_recyclerView.SetAdapter(portfolioAdapter); if (count_ < 1) { holderEntry.portfolioTitleTV.Visibility = ViewStates.Gone; holderEntry.portfolio_recyclerView.Visibility = ViewStates.Gone; } else { holderEntry.portfolioTitleTV.Visibility = ViewStates.Visible; holderEntry.portfolio_recyclerView.Visibility = ViewStates.Visible; } } catch { holderEntry.portfolioTitleTV.Visibility = ViewStates.Gone; holderEntry.portfolio_recyclerView.Visibility = ViewStates.Gone; } } else if (itemNode.GetItemType() == 2) { ExpertGroupData2 group2 = itemNode as ExpertGroupData2; GroupExpertThreeLevelHolder2 groupHolder2 = holder as GroupExpertThreeLevelHolder2; groupHolder2.itemRL.Visibility = ViewStates.Visible; groupHolder2.skillNameTV.Text = group2.subcategory; groupHolder2.skillNameTV.SetTypeface(tf, TypefaceStyle.Normal); } }