2014-10-10 11 views
5

Creo la nuova app mobile utilizzando il modulo xamarin. Devo creare due pagine di accesso e schermata iniziale. Ottengo il campione da HereXamarin.form setpage non ha funzionato la seconda volta

Ma quando creo lo stesso non posso andare in seconda pagina. rimane sempre solo la pagina di accesso.

Nel mio codice MainActivity Android metodo

public class MainActivity : AndroidActivity, LoginManager 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     Xamarin.Forms.Forms.Init(this, bundle); 

     SetPage(App.GetLoginPage(this)); 
     // SetPage(App.GetLoginPage(this)); 


    } 
    #region ILoginManager implementation 
    public void ShowMainPage() 
    { 
     SetPage(App.GetHomePage(this)); 
    } 

    public void Logout() 
    { 
     SetPage(App.GetLoginPage(this)); 
    } 
    #endregion 
} 

setPage chiamato seconda volta, ma il contenuto della pagina non sostituiti. Si prega di aiutare uno qualsiasi

+0

Il quadro Xamarin.Forms la navigazione per voi. Dovresti utilizzare la classe Xamarin.Forms.Navigation per gestire lo Stack di navigazione ed evitare l'uso di SetPage nel progetto Android, –

risposta

0

Ecco un lavoro intorno al secondo problema di pagina set con Android. Crea una seconda interfaccia e invece di utilizzare la pagina impostata sull'attività esistente avvia una nuova attività in cui OnCreate della nuova attività chiama la pagina impostata e termina l'attività corrente.

App.cs

public static ILoginManager LoginManager; 
    public static IAppNavigation SplashManger;  


    public static Page GetLoginPage(ILoginManager lmanager) 
    { 
     LoginManager = lmanager;   
     return new Page_Login(); 
    } 

    public static Page GetShowSplashPage(IAppNavigation iSplashNavigation) 
    { 
     SplashManger = iSplashNavigation; 
     return new Page_Splash(); 
    } 

Android MainActivty

[Activity(Label = "", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class MainActivity : AndroidActivity, IAppNavigation 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     //Window.RequestFeature(WindowFeatures.NoTitle); 
     base.OnCreate(bundle); 

     Xamarin.Forms.Forms.Init(this, bundle); 
     SetPage(App.GetShowSplashPage(this)); 
    } 



    public void GetLoginPage() 
    { 
     StartActivity(new Intent(this, typeof(LoginActivity))); 
     Finish(); 
    } 

Android LoginActivity

[Activity(Label = "", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class LoginActivity : AndroidActivity, ILoginManager 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     Xamarin.Forms.Forms.Init(this, bundle); 
     SetPage(App.GetLoginPage(this)); 
    } 



    public void GetMainMenu() 
    { 
     StartActivity(new Intent(this, typeof(MainMenuActivity))); 
     Finish(); 
    } 

In iOS non è necessario fare nulla di speciale, basta implementare tutte le interfacce necessarie che si useranno nel delegato dell'app. gestisce

iOS AppDelegate

[Register("AppDelegate")] 
public partial class AppDelegate : UIApplicationDelegate, ILoginManager, IAppNavigation 
{ 
    // class-level declarations 
    UIWindow window; 


    public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
    { 
     Forms.Init(); 

     window = new UIWindow(UIScreen.MainScreen.Bounds); 

     window.RootViewController = App.GetShowSplashPage(this).CreateViewController(); 

     window.MakeKeyAndVisible(); 

     return true; 
    } 

    public void GetMainMenu() 
    { 
     window.RootViewController = App.GetMainMenu().CreateViewController(); 
     window.MakeKeyAndVisible(); 
    } 

    public void GetLoginPage() 
    { 
     window.RootViewController = App.GetLoginPage(this).CreateViewController(); 
     window.MakeKeyAndVisible(); 
    }