切换片段而不替换Android

时间:2015-06-02 04:03:02

标签: android android-fragments

我的应用程序中有三个片段和一个导航抽屉,即HomeFragment,DetailFragment和CountryFragment。现在,当HomeFragment(默认片段)中的Iam,我检查一个条件,如果它返回false,我想重定向到CountryFragment而不替换片段。

最初,在主持人活动Iam做这样的事情: -

HomeActivity。

private Android.Support.V4.App.Fragment mCurrentFragment = new SupportFragment();
        private Stack<Android.Support.V4.App.Fragment> mStackFragments;
 protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView (Resource.Layout.homelayout);
      Android.Support.V4.App.FragmentTransaction tx = SupportFragmentManager.BeginTransaction();

                tx.Add(Resource.Id.main, homeFragment);
                tx.Add(Resource.Id.main, countryFragment);
                tx.Hide(countryFragment);
                tx.Add(Resource.Id.main, detailFragment);
                tx.Hide(detailFragment);

                CurrentFragment = homeFragment;
                tx.Commit();
}

void MenuListView_ItemClick (object sender, AdapterView.ItemClickEventArgs e)
        {
            Android.Support.V4.App.Fragment fragment = null;

            switch (e.Id)
            {
                case 0:
                    ShowFragment(homeFragment);
                    break;
                case 1:
                    ShowFragment(countryFragment);
                    break;
                case 2:
                    ShowFragment(detailFragment);
                    break;


            }

         }




  public  void ShowFragment(SupportFragment fragment)
    {

        if (fragment.IsVisible)
        {
            return;
        }

        var trans = SupportFragmentManager.BeginTransaction();


        fragment.View.BringToFront();
        mCurrentFragment.View.BringToFront();

        trans.Hide(mCurrentFragment);
        trans.Show(fragment);

        trans.AddToBackStack(null);
        mStackFragments.Push(mCurrentFragment);
        trans.Commit();

        mCurrentFragment = fragment;

    }

接下来在HomeFragment Iam做了类似的事情: -

public void BtnCompleteSubmit_Click(object sender, EventArgs e)
        {
            dlgAlert.Dismiss();
            CountryFragment countryFrag = new CountryFragment ();
            // Create new fragment and transaction
            var myActivity = (HomeActivity)this.Activity;

            myActivity.ShowFragment(countryFrag );


        }

这会转到HomeActivity的ShowFragment(),但即使在创建NavigationDrawer时最初创建了View,片段的视图仍为null。我该如何解决这个问题?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以做的是创建与字符串标记名相关联的所有片段。 然后使用片段管理器将它添加到片段transcation中。 如果你想在片段之间切换,那么写一个if else语句并按标签方法找到片段。

if (mFragManager.findFragmentByTag("FRAG_HOME") != null)
            showFragment(mFragManager.findFragmentByTag("FRAG_HOME"));
        else
            showFragment(new homeFragment(), "FRAG_HOME");

在你展示片段方法:

public  void ShowFragment(Fragment fragment, String tag)
{

        mFragTransaction= mFragManager.BeginTransaction();
if (fragment.isAdded())
                mFragTransaction.show(fragment);
            else
                mFragTransaction.add(ResId, fragment, tag).setBreadCrumbShortTitle(tag);

                mFragTransaction.addToBackStack(tag);

            mFragTransaction.commit();

}