2016-03-25 27 views
-2
  • Ich möchte Fragment-Methode von einem anderen Fragment aufrufen, so finde ich relevante Fragment in Host-Aktivität und Call-Methode dieses Fragments. Aber irgendwann bekomme ich Fragment null.Fragment in Host-Aktivität Null

    Angenommen, ich möchte Daten von Fragment A von allen anderen Fragment speichern. Es gibt 4 Fragmente wie A, B, C und D. Wenn ich auf die Schaltfläche "Speichern" von Fragment A und B klicke, funktioniert es gut, aber wenn ich Daten von Fragment C und D speichere, dann wird Fragment A null.

Hier ist mein Code:

HostActivity.cs

public class HostActivityView : MvxCachingFragmentCompatActivity<HostActivityViewModel> 
{ 
protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     try 
     {    

      SetContentView(Resource.Layout.HostActivityView); 

      var toolbar = FindViewById<Toolbar>(Resource.Id.myToolbar); 

      if (toolbar != null) 
      { 
       // Toolbar will now take on default actionbar characteristics 
       SetSupportActionBar(toolbar);      
      } 

      // View Pager 
      var viewPager = FindViewById<ViewPager>(Resource.Id.viewpager); 
      if (viewPager != null) 
      { 
       // Add tabs in view pager 
       var fragments = new List<MvxFragmentStatePagerAdapter2.FragmentInfo> 
      { 
       new MvxFragmentStatePagerAdapter2.FragmentInfo("Ticket", typeof(Tab_Ticket), typeof(TicketEditViewModel)), 
       new MvxFragmentStatePagerAdapter2.FragmentInfo("Employee", typeof(Tab_Employee), typeof(EmployeeViewModel)), 
       new MvxFragmentStatePagerAdapter2.FragmentInfo("Response", typeof(Tab_Correspondence), typeof(ResponseViewModel)), 
       new MvxFragmentStatePagerAdapter2.FragmentInfo("Expense", typeof(Tab_Expenses), typeof(ExpenseViewModel)),     

      }; 
       viewPager.Adapter = new MvxFragmentStatePagerAdapter2(this, SupportFragmentManager, fragments); 
      } 

      var tabLayout = FindViewById<TabLayout>(Resource.Id.tabs); 
      tabLayout.SetupWithViewPager(viewPager);    

     } 
     catch (Exception ex) 
     { 
      Mvx.Resolve<IUserInteraction>().Alert(ex.Message); 
     } 

    } 

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
switch (item.ItemId) 
{ 
    case Resource.Id.menu_accept: 

     Tab_Ticket tabTicket = (Tab_Ticket)SupportFragmentManager.FindFragmentByTag("Tab_Ticket"); 
     if (tabTicket != null) 
     { 
      tabTicket.OnOptionsItemSelected(item); 
      handled = true; 
     }     

     break;  
} 
} 
} 

Hier mein Fragment-Code ist: Fragment.cs:

public class Tab_Ticket : MvxFragment<TicketEditViewModel> 
{ 
public override View OnCreateView(Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) 
    { 
     var ignored = base.OnCreateView(inflater, container, savedInstanceState); 

     var view = this.BindingInflate(Resource.Layout.frg_tab_ticket, null); 
     return view; 
    } 
    public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     switch (item.ItemId) 
     { 

      case Resource.Id.menu_accept: 
       this.ViewModel.CmdTicketSave.Execute(null); 
       return true; 
       break; 
     } 
    } 
} 

mich bitte vorschlagen, wo ich gehen falsch?

Vielen Dank

+0

Ihre Frage ist nicht klar, was Sie zu tun versuchen. Ich verstehe nicht, wo Caching beteiligt ist in diesem – suku

+0

@suku: Bitte ignorieren Sie diese Aussage. Ich habe das gerade erwähnt, weil es in mvvmcross 4 für fragment eine neue Instanz des Ansichtsmodells erstellt und beim Klicken auf Fragment A intern Fragment B aufruft, um Daten zu laden. –

+0

umformulieren und bearbeiten Sie Ihre Frage und fügen Sie mehr Code hinzu – suku

Antwort

0

Endlich die Lösung für dieses Problem. Erhöhen Sie in der Hostaktivität die Pager-Seitenbegrenzung der Ansicht. Weil ich 5 Fragmente habe und standardmäßig 3 Fragmente im Support Fragment Manager anzeigen. Also irgendwann das erste Fragment null bekommen. Diese Zeile in meinem Code hinzugefügt und es funktioniert gut.

viewPager.OffscreenPageLimit = 6; 

Here ist mehr Details zu diesem Problem.

Verwandte Themen