2015-06-02 3 views
0

У меня есть три фрагмента и ящик для навигации в моем приложении: HomeFragment, DetailFragment и CountryFragment. Теперь, когда Iam в HomeFragment (фрагмент по умолчанию), я проверяю условие, если оно возвращает false, я хочу перенаправить на CountryFragment без замены фрагмента.Переключить фрагменты без замены Android

Первоначально в принимающей деятельности И делать что-то вроде этого: -

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); 


     } 

Это идти к ShowFragment() из HomeActivity, но вид для фрагмента равна нулю, даже думал, что представление было создано изначально в то время как NavigationDrawer был создан. Как я могу это решить? любая помощь приветствуется.

ответ

1

Что вы можете сделать, это создать весь фрагмент с ассоциированным именем тега String. Затем добавьте его транскрипцию фрагмента с помощью диспетчера фрагментов. После того, как вы хотите перейти между фрагментами, затем напишите оператор if else и найдите метод фрагмента по тегу.

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

В вас показать Fragment метод:

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(); 

} 
+0

Привет. Спасибо за ответ. В ShowFragment Iam с помощью Show/Hide для фрагментов, чтобы мне не пришлось добавлять их снова. Как это может работать с вашим примером? – user3034944

+0

Даже в моем случае он не добавляется каждый раз, а только один раз. Затем, если он уже добавлен, найдите его по тегу, а затем покажите его, вот и все. – zIronManBox

+0

Фрагменты показывают друг на друга, когда я пытаюсь это сделать – user3034944

Смежные вопросы