我的应用程序中有三个片段和一个导航抽屉,即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。我该如何解决这个问题?任何帮助表示赞赏。
答案 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();
}