2017-11-01 9 views
1

私の引き出しメニューに問題があります。引き出しメニューをクリックした後、別のページに移動しますが、戻るボタンを押してからアプリケーションを閉じます。私はここにしたい、そのここでのアプリケーションは、ナビゲーションドロワーの中に私のコードXamarinフォームで引き出しをクリックした後にダッシュボードに戻る方法

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using KGVC.Views.UsersInfo; 
using System.Threading.Tasks; 
using KGVC.Models; 
using KGVC.Views.RssFeed; 
using Xamarin.Forms; 
using Xamarin.Forms.Xaml; 

namespace KGVC.Views.MainPages 
{ 
    [XamlCompilation(XamlCompilationOptions.Compile)] 
    public partial class MainPage : MasterDetailPage 
    { 
     public List<MasterPageItem> menuList { get; set; } 

     public MainPage() 
     { 

      InitializeComponent(); 

      menuList = new List<MasterPageItem>(); 

      // Creating our pages for menu navigation 
      // Here you can define title for item, 
      // icon on the left side, and page that you want to open after selection 
      var page0 = new MasterPageItem() { Title = "Dashboard", Icon = "icon_home.png", TargetType = typeof(MainPage) }; 
      var page1 = new MasterPageItem() { Title = "Users Profile", Icon = "icon_home.png", TargetType = typeof(BioUsers) }; 
      var page2 = new MasterPageItem() { Title = "Points", Icon = "icon_point.png", TargetType = typeof(RssFeedView) }; 
      var page3 = new MasterPageItem() { Title = "Inbox", Icon = "icon_inbox.png", TargetType = typeof(TestPage1) }; 
      var page4 = new MasterPageItem() { Title = "Card Community", Icon = "icon_community.png", TargetType = typeof(TestPage1) }; 
      var page5 = new MasterPageItem() { Title = "Offers & Promotion", Icon = "icon_point.png", TargetType = typeof(Logout) }; 
      var page6 = new MasterPageItem() { Title = "Info & Service", Icon = "icon_info", TargetType = typeof(Logout) }; 


      // Adding menu items to menuList 
      menuList.Add(page0); 
      menuList.Add(page1); 
      menuList.Add(page2); 
      menuList.Add(page3); 
      menuList.Add(page4); 
      menuList.Add(page5); 
      menuList.Add(page6); 


      // Setting our list to be ItemSource for ListView in MainPage.xaml 
      navigationDrawerList.ItemsSource = menuList; 

      // Initial navigation, this can be used for our home page 
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(GridMenu))); 
     } 

     private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 

      var item = (MasterPageItem)e.SelectedItem; 
      Type page = item.TargetType; 

      Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
      IsPresented = false; 
     } 


    } 
} 

、ここでバックダッシュボードに代わりの近くに行くとイムプレスバックボタンである私のMasterPageItemクラスは

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Input; 

namespace KGVC.Views.MainPages 
{ 
    public class MasterPageItem 
    { 
     public string Title { get; set; } 
     public string Icon { get; set; } 
     public Type TargetType { get; set; } 
     public ICommand Command { get; set; } 
    } 
} 
作ること浩

ですそれは起こっている、私はanytingを変更するか、これが可能であるそれ ?

+0

ハードウェアの戻るボタンまたはアプリケーションの戻るボタンを押していますか? –

+0

私はハードウェアの戻るボタンを押して –

+0

私の答えを見てその願って! –

答えて

2

オーバーライドMainActivityでOnBackPressed(アンドロイド)私のxamarinフォームアプリ(App.Instance(それはシングルトンである))

public bool DoBack 
{ 
    get 
    { 
     MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage; 

     if (mainPage != null) 
     {  
      bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented; 

      // we are on a top level page and the Master menu is NOT showing 
      if (!canDoBack) 
      { 
       // don't exit the app just show Dashboard 
       //mainPage.IsPresented = true; 

       Type page = typeof(MainPage); 

       mainPage.Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
       return false; 
      } 
      else 
      { 
       return true; 
      }      
     } 
     return true; 
    } 
} 

---編集で

public override void OnBackPressed() 
{ 
    if(App.Instance.DoBack) 
    { 
     base.OnBackPressed(); 
    } 
} 

---

static App _instance; 
public static App Instance { get { return _instance; } } 

Set _instance = this; App()

+0

私はApp.Instance.DoBackを書いたときに主なアクティビティに疑問を持っています。そのアプリケーションにはインスタンスが含まれていません。私はここでインスタンスをフィールドまたは何か他のものとして定義していますか? –

+0

私の更新された回答を参照してください –

+0

インスタンスは静的変数は、アプリケーションの戻りインスタンスです –

関連する問題