Witam,

mam problem ze swoja aplikacja Xamarin android.

Po nacisnieciu przycisku metoda wywoluje event ktory otwiera dialog.
W dialogu wspisujemy dane urzytkownika. Jesli sa poprawne zamyka dialog i zmienia layout na inny.

Jednak po wpisaniu poprawnych danych dialog sie zamyka, ale nie przenosi do kolejneogo layoutu.

Kiedy przyciskam przycisk jeszcze raz przechodzi do dialogu i nie wazne co bym wpisal otwiera layout

Wiem, ze jest cos nie tak z kolejnoscia wywolywania metody, tylko nie wiem jak mam ja zaimplementowac poprawnie.

Tutaj link do repozytorium na gicie: https://github.com/BartusZak/Dziennik-Cwiczen

metoda ktora sie wykonuje przy wcsnieciu przycisku:

  //Tworze Click Event dla przyciusku "Zaloguj sie" (wykorzystuje metode anonimową)
            mBtZaloguj.Click += (object sender, EventArgs args) =>
            {
                //Wyswietlanie dilogu do logowania
                FragmentTransaction zaloguj_tran = FragmentManager.BeginTransaction();
                dialog_zaloguj zalogujDialog = new dialog_zaloguj();
                zalogujDialog.Show(zaloguj_tran, "dialog logowania");

                zalogujDialog.OnZalogujComplete += ZalogujDialog_OnZalogujComplete;

                otworzDziennik();

            };

Tutaj metoda ktora powinna wykonac sie na koniec:

 //Logowanie zakonczono poprawnie
        private void ZalogujDialog_OnZalogujComplete(object sender, OnZalogujEventArgs e)
        {
            if (dialog_zaloguj.ZalogujSuccess)
            {

                //SetContentView(Resource.Layout.dziennik_main);
                //----------------------------------------------------------------------------------------------
                //DZIENNIK
                SetContentView(Resource.Layout.dziennik2);
                FragmentTransaction transaction = FragmentManager.BeginTransaction();
                SlidingTabsFragment fragment = new SlidingTabsFragment();
                transaction.Replace(Resource.Id.sample_content_fragment, fragment);
                transaction.Commit();
            }

        } 

Tutaj klasa dialog_zaloguj.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using MySql.Data.MySqlClient;
using System.Data;
using Java.Lang;
using System.Threading.Tasks;

namespace LoginSystem
{
    #region Event #1
    //Tworze własną klasę eventu potrzebna do onclick event
    public class OnZalogujEventArgs : EventArgs
    {
        private string txtEmailZaloguj;
        private string txtPasswordZaloguj;

        //Wykorzystuje properties, aby moc uzyc zmienne na zewnatrz klasy
        public string Email
        {
            get { return txtEmailZaloguj; }
            set { txtEmailZaloguj = value; }
        }
        public string Password
        {
            get { return txtPasswordZaloguj; }
            set { txtPasswordZaloguj = value; }
        }

        //Konstruktor ktory jest bazowym konstruktorem
        public OnZalogujEventArgs(string email, string password) : base()
        {
            //Wykorzystuje properties do przypisania (inicjalizacji) wartosci zmiennych
            Email = email;
            Password = password;
        }

    }
    #endregion
    public class dialog_zaloguj : DialogFragment
    {
        //Zmienne globalne
        private EditText txtEmailZaloguj;
        private EditText txtPasswordZaloguj;
        private Button btnZaloguj;
        private ProgressBar mprogressBarZaloguj;
        public static bool ZalogujSuccess;

        //mySQL database status variable
        private TextView txtSysLog;

        #region Tworze metodę nadpisującą, ktora wyswietla dialog
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
           base.OnCreateView(inflater, container, savedInstanceState);

            //Przypisuje plik .axml
            var view = inflater.Inflate(Resource.Layout.dialog_zaloguj, container, false);

            //Inicjuje zmienne globalne
            txtEmailZaloguj = view.FindViewById<EditText>(Resource.Id.txtEmailZaloguj);
            txtPasswordZaloguj = view.FindViewById<EditText>(Resource.Id.txtPasswordZaloguj);
            btnZaloguj = view.FindViewById<Button>(Resource.Id.btnZaloguj);
            txtSysLog = view.FindViewById<TextView>(Resource.Id.XtxtSysLog);
            mprogressBarZaloguj = view.FindViewById<ProgressBar>(Resource.Id.progressBarZaloguj);

            //Rejestruje onclick event (2x tab generuje metode) 
           btnZaloguj.Click += btnZaloguj_Click;

            return view;
        }
        #endregion
        void btnZaloguj_Click(object sender, EventArgs e)
        {
            //Co się dzieje po wciśnieciu przycisku "Zaloguj!"
            //Widoczny progressbar
            mprogressBarZaloguj.Visibility = ViewStates.Visible;
            //Wywołuje event
           OnZalogujComplete.Invoke(this, new OnZalogujEventArgs(txtEmailZaloguj.Text, txtPasswordZaloguj.Text));

            MySqlConnection con = new MySqlConnection("Server=bartuszak.pl;Port=3306;database=android;User Id=android;Password=pJ8AyURCxKqYRpeJ;charset=utf8");

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                    #region Pirwszy sposob "wyluskwania" danych z bazy
                    // MySqlCommand cmd = new MySqlCommand("SELECT ID FROM Users WHERE [email protected] AND [email protected]",con);
                    // cmd.Parameters.AddWithValue("@email", txtEmailZaloguj);
                    // cmd.Parameters.AddWithValue("@pass", txtPasswordZaloguj);
                    //  txtSysLog.Text = cmd.GetString(0);
                    #endregion

                    /////Drugi sposob
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.CommandText = string.Format("SELECT ID,User_FirstName FROM Users WHERE User_Email ='"+txtEmailZaloguj.Text+"' AND User_Password='"+txtPasswordZaloguj.Text+"'"); 
                    cmd.Connection = con;
                    MySqlDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        ZalogujSuccess = true;
                        int ID = int.Parse(reader.GetString(0));
                        string User_FirstName = reader.GetString(1);

                        //Wyswietlam komunikat o zalogowaniu
                        txtSysLog.Text = string.Format("Zalogowny jako: {0}\nID: {1}", User_FirstName, ID);                         
                    }
                    else
                    {
                        txtSysLog.Text = "Błędne hasło lub email!";
                    }

                    reader.Close();                   
                }
            }
            catch(MySqlException ex)
            {
                txtSysLog.Text = ex.ToString();
            }
            finally
            {
                con.Close();
            }

            //Ustawiam widocznosc progessbar na Invisible
            mprogressBarZaloguj.Visibility = ViewStates.Invisible;

            if (ZalogujSuccess)
            {
                txtSysLog.Text = "Zalogowano";
                Dismiss();

            }                      
        }

        //Tworze inicjalizator do eventu
        public event EventHandler<OnZalogujEventArgs> OnZalogujComplete;

        //Tworzę metodę nadpisującą, która wykonuję sie przed wyświetleniem dialogu
        public override void OnActivityCreated(Bundle savedInstanceState)
        {
            //Usuwam tytuł okna (przypisuje wartosc invisible);
            Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
            base.OnActivityCreated(savedInstanceState);
            //Przypisuje animacje do dialogu
            Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation;
        }       
    }
} 

Wszysto tez wrzucone na gita, link ww.

Błagam, powiedzcie mi w jaki sposob moge zamienic ta metode aby wykonywala sie na koncu, a nie z czego wnioskuje od razu po wcisnieju przycisku :(