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
Ihre Frage ist nicht klar, was Sie zu tun versuchen. Ich verstehe nicht, wo Caching beteiligt ist in diesem – suku
@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. –
umformulieren und bearbeiten Sie Ihre Frage und fügen Sie mehr Code hinzu – suku