-2
  • I want to call fragment method from another fragment, so I find relevant fragment in host activity and call method of this fragment. But some time I getting fragment null.

    Suppose I want to save data of fragment A from all other fragment. There is 4 fragment like A, B, C and D. When I click save button from fragment A and B then it working fine but When I save data from fragment C and D then Fragment A getting null.

Here is my 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;       
}
} 
}

Here is my fragment Code : 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;
        }
    }
 }

Please suggest me where I going wrong?

Thank you

Community
  • 1
  • 1
Uddhao Pachrne
  • 531
  • 1
  • 8
  • 22

1 Answers1

0

Finally got the solution for this problem. In host activity increase the view pager page limit. Because I have 5 fragments and default it display 3 fragments in support fragment manager. So sometime getting first fragment null. Added this line in my code and it working fine.

viewPager.OffscreenPageLimit = 6;

Here is more details about this issue.

Community
  • 1
  • 1
Uddhao Pachrne
  • 531
  • 1
  • 8
  • 22