1

Я создал представление, которое я хочу использовать в качестве сообщения об ошибке.Android View (Dialog/Layout) в нескольких действиях

Если телефон не подключен к Интернету (мобильные данные или Wi-Fi), я хочу показать сообщение об ошибке в своем приложении, чтобы пользователь знал, что все с этого момента будет локально сохранено (а не на сервере).

Проблема в том, что я хочу, чтобы это сообщение не спалось, даже когда пользователь перешел от одной активности к другой.

Я попытался использовать диалог и LinearLayout на WindowManager. Не работает.

Это то, что я сделал.

public void noConnectionLayout() 
    { 
     LinearLayout mainLayout = new LinearLayout (this.ApplicationContext); 
     mainLayout.Clickable = false; 
     mainLayout.Focusable = false; 
     mainLayout.FocusableInTouchMode = false; 
     mainLayout.LongClickable = false; 
     mainLayout.SetBackgroundColor (Android.Graphics.Color.Red); 
     mainLayout.Orientation = Orientation.Vertical; 

     var spaceFromTopPara = (int) (65 * this.Resources.DisplayMetrics.Density); 
     var layoutHeight = (int)(25 * this.Resources.DisplayMetrics.Density); 

     WindowManagerLayoutParams windowLayoutParams = new WindowManagerLayoutParams (
      ViewGroup.LayoutParams.MatchParent, 
      layoutHeight, 
      WindowManagerTypes.SystemError, 
      WindowManagerFlags.NotTouchModal | WindowManagerFlags.NotFocusable, 
      Format.Translucent); 
     windowLayoutParams.ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait; 
     windowLayoutParams.Gravity = GravityFlags.Top; 
     windowLayoutParams.Y = spaceFromTopPara; 

     TextView textNoConnectionMesg = new TextView (this); 
     textNoConnectionMesg.Text = "No Connection available."; 
     textNoConnectionMesg.SetTypeface (this.latoFont, TypefaceStyle.Normal); 
     textNoConnectionMesg.LayoutParameters = new ViewGroup.LayoutParams (ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent); 
     textNoConnectionMesg.Gravity = GravityFlags.Center; 
     textNoConnectionMesg.SetTextSize (Android.Util.ComplexUnitType.Dip, 14f); 
     textNoConnectionMesg.SetBackgroundColor (Android.Graphics.Color.Transparent); 
     textNoConnectionMesg.SetTextColor (Android.Graphics.Color.White); 

     mainLayout.AddView (textNoConnectionMesg); 

     WindowManager.AddView (mainLayout, windowLayoutParams); 

    } 

Когда активность меняется, вид просто уходит.

Что я могу сделать здесь?

Спасибо за ваше время.

+0

Один из способов - передать сообщение новому действию и воссоздать представление. – Simar

ответ

1

Диалоги по своей сути связаны с действиями. Кажется странным, что ваши пользователи даже смогут перемещаться между действиями с отображением диалога. Если вы хотите разрешить навигацию и, на экране отобразится диалоговое окно состояния соединения, вам нужно будет отобразить диалоговое окно, например. onStart of BaseActivity, который распространяется на все ваши другие действия.

+0

Итак, в основном мне нужно создать новую «активность», вызвать мою вышеперечисленную функцию в «OnStart» и распространить все мои другие действия на эту активность? Это действительно хорошая идея, но как я удалю этот вид, когда соединение вернется? –

+0

Вы можете слушать изменения в подключении, как [описано в документации] (http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges). Когда связь изменяется, вы можете запросить его состояние, а затем ответить соответствующим образом. Обратитесь к документации и другим SO-ответам для этого - это не совсем тривиально, так как вам нужно определить, будет ли ваше приложение на переднем плане при получении широковещательной передачи. – stkent

Смежные вопросы