none
Como integrar el uso de Fragments y elementos de Android Support al uso de MVVMCross RRS feed

  • Pregunta

  • Hola a todos

    Estoy aprendiendo a desarrollar con Xamarin, estoy intentando hacer unas aplicaciones para aprender y hasta el momento, apoyandome en ejemplos de internet he realizado 2 por separados y ahora quiero unificarla).

    El primero es super sencillo, solo una vista que muestra un listado de posts, pero que implemente MVVM usando el framework MVVMCross, este es el código:

    //PROYECTO CORE
    public class App : MvxApplication
    {
    	public App()
    	{
    		Mvx.RegisterType<IPostService, PostService>();
    		var calcExample = Mvx.Resolve<IPostService>();
    		var appStart = new CustomAppStart();
    		Mvx.RegisterSingleton<IMvxAppStart>(appStart);
    	}
    }
    class CustomAppStart : MvxNavigatingObject, IMvxAppStart
    {
    	public void Start(object hint = null)
    	{
    		ShowViewModel<MainModel>();
    	}
    }	
    //ViewModels
    //Initial
    public class MainViewModel : MvxViewModel
    {
    	public ICommand NavigateAllPosts
    	{
    		get { return new MvxCommand(() => ShowViewModel<AllPostsViewModel>()); }
    	}
    }
    public class AllPostsViewModel : MvxViewModel
    {
    	public List<Post> posts { get; set; }
    	public ICommand NavBack
    	{
    		get { return new MvxCommand(() => Close(this)); }
    	}
    	public void Init()
    	{
    		Task<List<Post>> result = Mvx.Resolve<Repository>().GetAllPosts();
    		result.Wait();
    		AllBills = result.Result;
    	}
    }
    //PROYECTO ANDROID
    public class Setup : MvxAndroidSetup
    {
    	public Setup(Context applicationContext) : base(applicationContext) {	}
    	protected override IMvxApplication CreateApp()
    	{
    		var dbConn = FileAccessHelper.GetLocalFilePath("restaurant.db3");
    		Mvx.RegisterSingleton(new Repository(dbConn));
    		return new Core.App();
    	}
    }
    //Views
    [Activity(Label = "All Posts", NoHistory = true)]
    public class AllPostsView : MvxActivity
    {
    	protected override void OnCreate(Bundle bundle)
    	{
    		base.OnCreate(bundle);
    		SetContentView(Resource.Layout.View_AllPosts);
    	}
    }

    Ahora bien, la segunda aplicación es algo mas elaborada y la hice siguiendo unos tutoriales de intrnet, esta no posee Activities si no que usa Fragments integrandolos con demas componentes de Android.Support.Design como (TabLayout, ViewPager, etc). El punto que la base es una aplicación o estructura con unas pestañas arribas y a medida que se mueve con el dedo, se muestran los otros Fragments...

    El punto es que se me ha hecho súper dificil integrarle a esta última el framwork MVVMCros y quería que me ayudaran o guiaran al respecto... Así defino los Fragments:

    public class Fragment2 : Android.Support.V4.App.Fragment
    {
    	public override void OnCreate(Bundle savedInstanceState)
    	{
    		base.OnCreate(savedInstanceState);
    
    		// Create your fragment here
    	}
    	public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    	{
    		View view = inflater.Inflate(Resource.Layout.Fragment2, container, false);
    
    		Button btnLogin = view.FindViewById<Button>(Resource.Id.btnLogin);
    		TextInputLayout passwordWrapper = view.FindViewById<TextInputLayout>(Resource.Id.txtInputLayoutPassword);
    		string txtPassword = passwordWrapper.EditText.Text;
    
    		btnLogin.Click += (o, e) =>
    		{
    			if (txtPassword != "1234")
    			{
    				passwordWrapper.Error = "Wrong password, try again";
    			}
    		};
    		return view;
    	}
    }
    Como integro el uso de Fragments desde el Core?

    Saludos
    lunes, 20 de noviembre de 2017 1:36