private void SplashInit() { NextButton = FindViewById <ImageButton>(Resource.Id.next_button); SkipButton = FindViewById <Button>(Resource.Id.skip_button); SkipButton.Click += SkipToEnd;; NextButton.Click += NextButton_Click; FindViewById <TextView>(Resource.Id.goto_login).Click += Goto_LoginPage; ConstraintLayout pagesHolder = FindViewById <ConstraintLayout>(Resource.Id.pages_holder); PagesGestureListener gestureListener = new PagesGestureListener(this); GestureDetectorCompat gestureDetector = new GestureDetectorCompat(this, gestureListener); pagesHolder.SetOnTouchListener(new PagesGestureRecognizer(gestureDetector)); FindViewById <ImageView>(Resource.Id.number_signup).Click += PhoneImageViewBtn_Click; FindViewById <ImageView>(Resource.Id.google_signup).Click += GoogleSignup_Click; FindViewById <ImageView>(Resource.Id.facebook_signup).Click += FacebookSignup_Click; FindViewById <ImageView>(Resource.Id.email_signup).Click += EmailLayout_Click; SplashBaseLayout = FindViewById <RelativeLayout>(Resource.Id.base_layout); IndicatorLayout indicators = FindViewById <IndicatorLayout>(Resource.Id.indicatorLayout); indicators.NumberOfIndicators = 3; FastFitPath = FindViewById <ImageView>(Resource.Id.fast_fit_path_imageview); FastFitInitialDrawable = FastFitPath.Drawable; }
/// <summary> /// 更新排序字段 /// </summary> /// <param name="message">消息</param> /// <returns>状态</returns> public int UpdateOrderNum(CMessage message) { List <IndicatorLayout> layouts = new List <IndicatorLayout>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; List <IndicatorLayout> updateLayouts = new List <IndicatorLayout>(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout receive = layouts[i]; String[] ids = receive.m_layoutID.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries); int idsSize = ids.Length; for (int j = 0; j < idsSize; j++) { String sql = String.Format("UPDATE INDICATORLAYOUT SET ORDERNUM = {0} WHERE USERID = {1} AND LAYOUTID = '{2}'", j, receive.m_userID, CStrA.GetDBString(ids[j])); SQLiteConnection conn = new SQLiteConnection(m_connectStr); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } updateLayouts.Add(receive); } int ret = Send(message, updateLayouts, true); updateLayouts.Clear(); layouts.Clear(); return(ret); }
/// <summary> /// 删除布局 /// </summary> /// <param name="message">消息</param> /// <returns>状态</returns> public int DeleteLayouts(CMessage message) { List <IndicatorLayout> layouts = new List <IndicatorLayout>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; List <IndicatorLayout> deleteLayouts = new List <IndicatorLayout>(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout receive = layouts[i]; String sql = String.Format("DELETE FROM INDICATORLAYOUT WHERE USERID = {0} AND LAYOUTID = '{1}'", receive.m_userID, CStrA.GetDBString(receive.m_layoutID)); SQLiteConnection conn = new SQLiteConnection(m_connectStr); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); deleteLayouts.Add(receive); } int ret = Send(message, deleteLayouts, true); layouts.Clear(); deleteLayouts.Clear(); return(ret); }
/// <summary> /// 添加布局 /// </summary> /// <param name="message">消息</param> /// <returns>状态</returns> public int AddJiras(CMessage message) { List <Jira> layouts = new List <Jira>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; List <IndicatorLayout> addLayouts = new List <IndicatorLayout>(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout receive = layouts[i]; receive.m_layoutID = Guid.NewGuid().ToString(); String sql = String.Format("INSERT INTO INDICATORLAYOUT(LAYOUTID, USERID, NAME, TEXT, TYPE, ORDERNUM, CREATETIME, MODIFYTIME) values ('{0}', {1}, '{2}', '{3}', {4}, {5}, '1970-1-1', '1970-1-1')", CStrA.GetDBString(receive.m_layoutID), receive.m_userID, CStrA.GetDBString(receive.m_name), CStrA.GetDBString(receive.m_text), receive.m_type, receive.m_orderNum); SQLiteConnection conn = new SQLiteConnection(m_connectStr); conn.Open(); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); conn.Close(); addLayouts.Add(receive); } int ret = Send(message, addLayouts, true); layouts.Clear(); addLayouts.Clear(); return(ret); }
void StartLoading() { backgroundDark.BackgroundColor = new Color(0, 0, 0, 0.5); backgroundDark.IsVisible = true; mainLayout.IsEnabled = false; IndicatorLayout.Start(); }
/// <summary> /// 更新模版的排序 /// </summary> /// <param name="requestID">请求ID</param> /// <param name="userID">用户ID</param> /// <param name="ids">ID</param> /// <returns>状态</returns> public int UpdateOrderNum(int requestID, int userID, List <String> ids) { String str = ""; int idsSize = ids.Count; for (int i = 0; i < idsSize; i++) { str += ids[i]; if (i != idsSize - 1) { str += ","; } } IndicatorLayout layout = new IndicatorLayout(); layout.m_layoutID = str; layout.m_userID = userID; List <IndicatorLayout> layouts = new List <IndicatorLayout>(); layouts.Add(layout); int ret = Send(FUNCTIONID_JIRA_UPDATEORDERNUM, requestID, layouts); layouts.Clear(); return(ret > 0 ? 1 : 0); }
void EndLoading() { backgroundDark.IsVisible = false; mainLayout.IsEnabled = true; IndicatorLayout.Stop(); }
/// <summary> /// 新建 /// </summary> public void Create() { IndicatorLayout layout = new IndicatorLayout(); layout.m_name = "新的布局"; layout.m_text = m_chart.GetIndicatorLayout(); layout.m_userID = DataCenter.UserID; m_indicatorLayoutService.AddLayout(m_indicatorLayoutService.OperatorRequestID, layout); }
/// <summary> /// 保存布局 /// </summary> public void Save() { IndicatorLayout layout = new IndicatorLayout(); GetLayout(ref layout); if (layout.m_layoutID != null && layout.m_layoutID.Length > 0) { m_indicatorLayoutService.UpdateLayout(m_indicatorLayoutService.OperatorRequestID, layout); } }
/// <summary> /// 设置布局 /// </summary> /// <param name="var">变量</param> /// <returns>结果</returns> public double SetLayout(CVariable var) { IndicatorLayout indicatorLayout = new IndicatorLayout(); if (DataCenter.IndicatorLayoutService.GetLayoutByName(m_indicator.GetText(var.m_parameters[0]), ref indicatorLayout)) { m_chart.SetIndicatorLayout(indicatorLayout.m_layoutID, indicatorLayout.m_text); } return(1); }
/// <summary> /// 删除布局 /// </summary> /// <param name="requestID">请求ID</param> /// <param name="layout">布局</param> /// <returns>状态</returns> public int DeleteLayout(int requestID, IndicatorLayout layout) { List <IndicatorLayout> layouts = new List <IndicatorLayout>(); layouts.Add(layout); int ret = Send(FUNCTIONID_JIRA_DELETEJIRAS, requestID, layouts); layouts.Clear(); return(ret > 0 ? 1 : 0); }
/// <summary> /// 更新布局 /// </summary> /// <param name="layout">布局</param> public void UpdateLayouts(IndicatorLayout layout) { String sql = String.Format("UPDATE INDICATORLAYOUT SET NAME = '{0}', TEXT = '{1}', TYPE = {2}, ORDERNUM = {3} WHERE USERID = {4} AND LAYOUTID = '{5}'", CStrA.GetDBString(layout.m_name), CStrA.GetDBString(layout.m_text), layout.m_type, layout.m_orderNum, layout.m_userID, CStrA.GetDBString(layout.m_layoutID)); SQLiteConnection conn = new SQLiteConnection(m_connectStr); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); }
/// <summary> /// 删除 /// </summary> public void Delete() { List <GridRow> selectedRows = m_gridLayouts.SelectedRows; int selectedRowsSize = selectedRows.Count; if (selectedRowsSize > 0) { String layoutID = selectedRows[0].GetCell(0).Text; IndicatorLayout layout = new IndicatorLayout(); m_indicatorLayoutService.GetLayoutByID(layoutID, ref layout); m_indicatorLayoutService.DeleteLayout(m_indicatorLayoutService.OperatorRequestID, layout); } }
/// <summary> /// 获取布局信息 /// </summary> /// <param name="template">布局信息</param> public void GetLayout(ref IndicatorLayout layout) { TextBoxA txtLayoutName = GetTextBox("txtLayoutName"); LayoutScaleDiv layoutScaleDiv = FindControl("divLayoutScale") as LayoutScaleDiv; if (m_layout.m_layoutID != null && m_layout.m_layoutID.Length > 0) { layout.m_layoutID = m_layout.m_layoutID; } layout.m_name = txtLayoutName.Text; layout.m_text = layoutScaleDiv.LayoutStr; layout.m_userID = DataCenter.UserID; }
private void removeIndicatorViews() { if (null != mIndicatorIvTop) { RefreshableViewWrapper.RemoveView(mIndicatorIvTop); mIndicatorIvTop = null; } if (null != mIndicatorIvBottom) { RefreshableViewWrapper.RemoveView(mIndicatorIvBottom); mIndicatorIvBottom = null; } }
/// <summary> /// 根据ID获取布局 /// </summary> /// <param name="layoutID">布局ID</param> /// <param name="layout">布局</param> /// <returns>状态</returns> public bool GetLayoutByID(String layoutID, ref IndicatorLayout layout) { int layoutsSize = m_layouts.Count; for (int i = 0; i < layoutsSize; i++) { if (m_layouts[i].m_layoutID == layoutID) { layout = m_layouts[i]; return(true); } } return(false); }
/// <summary> /// 获取布局信息 /// </summary> /// <param name="message">消息</param> /// <returns>状态</returns> public int GetLayouts(CMessage message) { IndicatorLayout receive = new IndicatorLayout(); List <IndicatorLayout> layouts = new List <IndicatorLayout>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); receive = layouts[0]; layouts.Clear(); GetLayouts(layouts, receive.m_userID, receive.m_layoutID); int ret = Send(message, layouts, false); layouts.Clear(); return(ret); }
/// <summary> /// 应用 /// </summary> private void Apply() { String layoutID = ""; List <GridRow> selectedRows = m_gridLayouts.SelectedRows; int selectedRowsSize = selectedRows.Count; if (selectedRowsSize > 0) { layoutID = selectedRows[0].GetCell(0).Text; } IndicatorLayout indicatorLayout = new IndicatorLayout(); if (m_indicatorLayoutService.GetLayoutByID(layoutID, ref indicatorLayout)) { m_chart.SetIndicatorLayout(indicatorLayout.m_layoutID, indicatorLayout.m_text); } }
/// <summary> /// 加载布局 /// </summary> /// <param name="layout">布局信息</param> private void LoadLayout(IndicatorLayout layout) { TextBoxA txtLayoutName = GetTextBox("txtLayoutName"); LayoutScaleDiv layoutScaleDiv = FindControl("divLayoutScale") as LayoutScaleDiv; ButtonA btnDelete = GetButton("btnDelete"); ButtonA btnApply = GetButton("btnApply"); ButtonA btnCreate = GetButton("btnCreate"); ButtonA btnSave = GetButton("btnSave"); txtLayoutName.Text = layout.m_name; layoutScaleDiv.LayoutStr = layout.m_text; bool btnEnabled = (layout.m_layoutID != null && layout.m_layoutID.Length > 0); btnDelete.Enabled = btnEnabled; btnApply.Enabled = btnEnabled; btnSave.Enabled = btnEnabled; }
/// <summary> /// 表格选中行改变方法 /// </summary> public void OnGridSelectedRowsChanged() { String layoutID = ""; List <GridRow> selectedRows = m_gridLayouts.SelectedRows; int selectedRowsSize = selectedRows.Count; if (selectedRowsSize > 0) { layoutID = selectedRows[0].GetCell(0).Text; } IndicatorLayout layout = new IndicatorLayout(); m_indicatorLayoutService.GetLayoutByID(layoutID, ref layout); m_layout = layout; LoadLayout(m_layout); m_window.Invalidate(); }
/// <summary> /// 调用控件线程方法 /// </summary> /// <param name="args">参数</param> public void OnInvoke(object args) { CMessage message = (CMessage)args; List <IndicatorLayout> layouts = new List <IndicatorLayout>(); IndicatorLayoutService.GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; switch (message.m_functionID) { case IndicatorLayoutService.FUNCTIONID_INDICATORLAYOUT_ADDLAYOUTS: AddLayoutsToGrid(layouts); break; case IndicatorLayoutService.FUNCTIONID_INDICATORLAYOUT_DELETELAYOUTS: { Dictionary <String, GridRow> ilRowsMap = GetIndicatorLayoutsRows(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = layouts[i]; if (ilRowsMap.ContainsKey(layout.m_layoutID)) { m_gridLayouts.RemoveRow(ilRowsMap[layout.m_layoutID]); } } m_gridLayouts.Update(); break; } case IndicatorLayoutService.FUNCTIONID_INDICATORLAYOUT_UPDATELAYOUTS: { Dictionary <String, GridRow> ilRowsMap = GetIndicatorLayoutsRows(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = layouts[i]; if (ilRowsMap.ContainsKey(layout.m_layoutID)) { ilRowsMap[layout.m_layoutID].GetCell(1).Text = layout.m_name; } } break; } } m_window.Invalidate(); }
/// <summary> /// 加载数据 /// </summary> /// <param name="state">状态</param> /// <returns>加载状态</returns> public static int LoadData(int state) { ChatData chatData = new ChatData(); m_chatService.Enter(m_chatService.RequestID, chatData); Indicator indicator = new Indicator(); indicator.m_userID = m_userID; m_indicatorService.GetIndicators(m_indicatorService.GetListRequestID, indicator); SecurityFilterTemplate template = new SecurityFilterTemplate(); template.m_userID = m_userID; m_securityFilterService.GetTemplates(m_securityFilterService.GetListRequestID, template); UserSecurityVisitsCount visitsCount = new UserSecurityVisitsCount(); visitsCount.m_userID = DataCenter.UserID; m_userSecurityService.GetVisitsCount(m_userSecurityService.GetListRequestID, visitsCount); UserSecurityCategory category = new UserSecurityCategory(); category.m_userID = m_userID; m_userSecurityService.GetCategories(m_userSecurityService.GetListRequestID, category); IndicatorLayout indicatorLayout = new IndicatorLayout(); indicatorLayout.m_userID = m_userID; m_indicatorLayoutService.GetLayouts(m_indicatorLayoutService.GetListRequestID, indicatorLayout); Macro macro = new Macro(); macro.m_userID = m_userID; m_macroService.GetMacros(m_macroService.GetListRequestID, macro); UserSession userSession = new UserSession(); userSession.m_userID = m_userID; m_userSessionService.GetSessions(m_userSessionService.GetListRequestID, userSession); if (state == 1) { m_securityService.LoadSecurities(); } if (m_mainUI != null) { m_mainUI.LoadData(); } return(0); }
/// <summary> /// 更新布局 /// </summary> /// <param name="message">消息</param> /// <returns>状态</returns> public int UpdateLayout(CMessage message) { List <IndicatorLayout> layouts = new List <IndicatorLayout>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; List <IndicatorLayout> updateLayouts = new List <IndicatorLayout>(); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout receive = layouts[i]; UpdateLayouts(receive); updateLayouts.Add(receive); } int ret = Send(message, updateLayouts, true); updateLayouts.Clear(); layouts.Clear(); return(ret); }
/// <summary> /// 获取布局信息 /// </summary> /// <param name="layouts">布局信息</param> /// <param name="userID">用户ID</param> /// <param name="layoutID">布局ID</param> public int GetLayouts(List <IndicatorLayout> layouts, int userID, String layoutID) { String sql = ""; if (layoutID != null && layoutID.Length > 0) { sql = String.Format("SELECT * FROM INDICATORLAYOUT WHERE USERID = {0} AND LAYOUTID = '{1}'", userID, CStrA.GetDBString(layoutID)); } else { if (userID > 0) { sql = String.Format("SELECT * FROM INDICATORLAYOUT WHERE USERID = {0} ORDER BY ORDERNUM", userID); } else { sql = "SELECT * FROM INDICATORLAYOUT ORDER BY ORDERNUM"; } } SQLiteConnection conn = new SQLiteConnection(m_connectStr); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); SQLiteDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { IndicatorLayout layout = new IndicatorLayout(); layout.m_layoutID = reader.GetString(0); layout.m_userID = reader.GetInt32(1); layout.m_name = reader.GetString(2); layout.m_text = reader.GetString(3); layout.m_type = reader.GetInt32(4); layout.m_orderNum = reader.GetInt32(5); layouts.Add(layout); } reader.Close(); conn.Close(); return(1); }
/// <summary> /// 发送消息 /// </summary> /// <param name="functionID">方法ID</param> /// <param name="requestID">请求ID</param> /// <param name="layouts">布局集合</param> /// <returns>状态</returns> public int Send(int functionID, int requestID, List <IndicatorLayout> layouts) { Binary bw = new Binary(); int layoutsSize = layouts.Count; bw.WriteInt(layoutsSize); for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = layouts[i]; bw.WriteString(layout.m_layoutID); bw.WriteInt(layout.m_userID); bw.WriteString(layout.m_name); bw.WriteString(layout.m_text); bw.WriteInt(layout.m_type); bw.WriteInt(layout.m_orderNum); } byte[] bytes = bw.GetBytes(); int ret = Send(new CMessage(GroupID, ServiceID, functionID, SessionID, requestID, m_socketID, 0, CompressType, bytes.Length, bytes)); bw.Close(); return(ret); }
private void addIndicatorViews() { PullMode mode = Mode; FrameLayout refreshableViewWrapper = RefreshableViewWrapper; if (mode.showHeaderLoadingLayout() && null == mIndicatorIvTop) { // If the mode can pull down, and we don't have one set already mIndicatorIvTop = new IndicatorLayout(Context, PullMode.PULL_FROM_START); FrameLayout.LayoutParams @params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); @params.RightMargin = Resources.GetDimensionPixelSize(Resource.Dimension.indicator_right_padding); @params.Gravity = GravityFlags.Top | GravityFlags.Right; refreshableViewWrapper.AddView(mIndicatorIvTop, @params); } else if (!mode.showHeaderLoadingLayout() && null != mIndicatorIvTop) { // If we can't pull down, but have a View then remove it refreshableViewWrapper.RemoveView(mIndicatorIvTop); mIndicatorIvTop = null; } if (mode.showFooterLoadingLayout() && null == mIndicatorIvBottom) { // If the mode can pull down, and we don't have one set already mIndicatorIvBottom = new IndicatorLayout(Context, PullMode.PULL_FROM_END); FrameLayout.LayoutParams @params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); @params.RightMargin = Resources.GetDimensionPixelSize(Resource.Dimension.indicator_right_padding); @params.Gravity = GravityFlags.Bottom | GravityFlags.Right; refreshableViewWrapper.AddView(mIndicatorIvBottom, @params); } else if (!mode.showFooterLoadingLayout() && null != mIndicatorIvBottom) { // If we can't pull down, but have a View then remove it refreshableViewWrapper.RemoveView(mIndicatorIvBottom); mIndicatorIvBottom = null; } }
/// <summary> /// 添加布局到表格控件中 /// </summary> /// <param name="layouts">布局列表</param> private void AddLayoutsToGrid(List <IndicatorLayout> layouts) { m_gridLayouts.BeginUpdate(); int layoutsSize = layouts.Count; for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = layouts[i]; GridRow row = new GridRow(); row.Grid = m_gridLayouts; GridStringCell idCell = new GridStringCell(); idCell.Grid = m_gridLayouts; idCell.Column = m_gridLayouts.GetColumn(0); idCell.Text = layout.m_layoutID; row.AddCell(0, idCell); GridStringCell textCell = new GridStringCell(); textCell.Grid = m_gridLayouts; textCell.Column = m_gridLayouts.GetColumn(1); textCell.Text = layout.m_name; row.AddCell(1, textCell); m_gridLayouts.AddRow(row); } m_gridLayouts.EndUpdate(); }
/// <summary> /// 通过流获取布局信息 /// </summary> /// <param name="layouts">指标信息</param> /// <param name="body">包体</param> /// <param name="bodyLength">包体长度</param> public static int GetLayouts(List <IndicatorLayout> layouts, byte[] body, int bodyLength) { Binary br = new Binary(); br.Write(body, bodyLength); int size = br.ReadInt(); if (size > 0) { for (int i = 0; i < size; i++) { IndicatorLayout layout = new IndicatorLayout(); layout.m_layoutID = br.ReadString(); layout.m_userID = br.ReadInt(); layout.m_name = br.ReadString(); layout.m_text = br.ReadString(); layout.m_type = br.ReadInt(); layout.m_orderNum = br.ReadInt(); layouts.Add(layout); } } br.Close(); return(1); }
/// <summary> /// 接收消息方法 /// </summary> /// <param name="message">消息</param> public override void OnReceive(CMessage message) { if (message.m_functionID != FUNCTIONID_INDICATORLAYOUT_GETLAYOUTS) { message.m_requestID = m_operatorRequestID; } List <IndicatorLayout> layouts = new List <IndicatorLayout>(); GetLayouts(layouts, message.m_body, message.m_bodyLength); int layoutsSize = layouts.Count; switch (message.m_functionID) { case FUNCTIONID_INDICATORLAYOUT_GETLAYOUTS: { m_layouts = layouts; m_loaded = true; break; } case FUNCTIONID_INDICATORLAYOUT_ADDLAYOUTS: { bool add = false; for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = null; if (!GetLayoutByID(layouts[i].m_layoutID, ref layout)) { m_layouts.Add(layouts[i]); add = true; } } if (!add) { return; } break; } case FUNCTIONID_INDICATORLAYOUT_DELETELAYOUTS: { for (int i = 0; i < layoutsSize; i++) { IndicatorLayout layout = null; if (GetLayoutByID(layouts[i].m_layoutID, ref layout)) { m_layouts.Remove(layout); } } break; } case FUNCTIONID_INDICATORLAYOUT_UPDATELAYOUTS: { for (int i = 0; i < layoutsSize; i++) { IndicatorLayout updateLayout = layouts[i]; int curLayoutsSize = m_layouts.Count; for (int j = 0; j < curLayoutsSize; j++) { IndicatorLayout layout = m_layouts[j]; if (layout.m_layoutID == updateLayout.m_layoutID) { m_layouts[j] = updateLayout; break; } } } break; } } base.OnReceive(message); }
/// <summary> /// Initialize GoogleMaps /// </summary> private async void InitializeMap() { try { geocoder = new Xamarin.Forms.GoogleMaps.Geocoder(); var positions = await geocoder.GetPositionsForAddressAsync("Belarus"); if (positions.Any()) { var pos = positions.First(); map.MoveToRegion(MapSpan.FromCenterAndRadius(pos, Distance.FromKilometers(2))); map.IsShowingUser = true; if (mpVM.MapPins.Any() && isStart) { var indicator = new IndicatorLayout(); MainLayout.Children.Add(indicator); int count = mpVM.MapPins.Count(); foreach (var mp in mpVM.MapPins) { count--; Position pinPosition = new Position(); var pinPositions = await geocoder.GetPositionsForAddressAsync(mp.Address); if (pinPositions != null && pinPositions.Any()) { pinPosition = pinPositions.First(); } await Task.Delay(1000); // workaround for #30 [Android]Map.Pins.Add doesn't work when page OnAppearing var pin = new Pin { Address = mp.Address, Position = pinPosition, Icon = BitmapDescriptorFactory.FromView(new BindingPinView("")), Label = $"{mp.Name}, {mp.Description}, {mp.Raiting}" }; map.Pins.Add(pin); if (count == 0) { map.MoveToRegion(MapSpan.FromCenterAndRadius(pinPosition, Distance.FromKilometers(1))); } } isStart = false; MainLayout.Children.Remove(indicator); } } else { await this.DisplayAlert("Not found", "Geocoder returns no results", "Close"); } } catch (Exception e) { await this.DisplayAlert("Not found", e.Message + " Check your internet", "Close"); } }