2017-06-13 66 views
0

我使用this library以实现Android的底部导航栏太(而不是旧tablayout),问题是调用OnAppearing/Disappearing是像这样:Xamarin的形式,使用BottomNavigationBar使得调用OnAppearing两次

  1. OnAppearing
  2. OnDisappearing
  3. OnAppearing

我打电话给我的ViewModel的0123在OnAppearing方法中使用方法(负责从rest API中获取数据并填充视图),并且由于它调用两次,该应用程序正面临性能问题。也作为OnDisappearing正在呼叫后首先OnAppearing我不能使用bool来处理何时呼叫LoadData()。那我该如何解决这个问题?

回答

0

不确定为什么它被调用两次,但你可以使用这个技巧。在类变量中存储OnAppearing的时间戳。当OnAppearing被称为检查上次被调用时,如果时间(可以说)少于10秒不做定位

1

在Xamarin.Android,如果你重写OnAppearing()在任何页面被推到导航堆栈,而不管它是当前方法将触发的最高可见视图。您应该在OnAppearing()中添加一个支票,以便您的视图位于堆栈顶部,如果它不是简单地不做任何事情。

protected override void OnAppearing() 
    { 
     var Page = Navigation.NavigationStack.Last(); 

     if (Page.GetType() == typeof(NAMEOFPAGECLASSYOURON)) 
     { 
      // Do what you want to do only if your on this page. 
     } 
    } 
+0

我很激动地尝试这种方式来简化角色,但它不工作!在两次if语句是'真' – AlirezaXX

+0

ViewModel.LoadData();那要求当前的观点重新呈现自己? – Digitalsa1nt

+0

是的,因为用户能够进入内部视图并且改变我在这个页面显示的内容,所以我必须在OnAppearing类似'Android onResume()'中调用'LoadData'。 – AlirezaXX