2013-11-23 2 views
0

Я хочу отобразить другой фрагмент, когда телефон не подключен к сети WiFi. Обычно я показываю MainFragment, когда соединение не доступно ErrorFragment.IlegalStateException при попытке заменить фрагмент

Я использую mWifi.isConnected(), чтобы проверить, есть ли соединение.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    if (mWifi.isConnected()) { 
     new PostTask(1).execute(); 
    } else { 
     MainFragment.firstPageListener.onSwitchToNextFragment(); 
    } 
} 

Это мой код (внутри MainFragment), чтобы переключиться на ErrorFragment, но это дает мне

11-23 20:57:29.588: E/AndroidRuntime(4025): java.lang.IllegalStateException: Recursive entry to executePendingTransactions 

Это в моем MainActivity (я использую ViewPager):

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    private final class FirstPageListener implements FirstPageFragmentListener { 
     public void onSwitchToNextFragment() { 
      mFragmentManager.beginTransaction().remove(mFragmentAtPos0).commit(); 
      if (mFragmentAtPos0 instanceof MainFragment) { 
       mFragmentAtPos0 = new ErrorFragment(listener); 
      } else { // Instance of NextFragment 
       mFragmentAtPos0 = new MainFragment(listener); 
      } 
      notifyDataSetChanged(); 
     } 
    } 

    private String[] titles = { "SEARCH", "LIST" }; 
    private final FragmentManager mFragmentManager; 
    public Fragment mFragmentAtPos0; 
    private Context context; 
    FirstPageListener listener = new FirstPageListener(); 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
     mFragmentManager = fm; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
     case 0: // Fragment # 0 
      if (mFragmentAtPos0 == null) { 
       mFragmentAtPos0 = new MainFragment(listener); 
      } 
      return mFragmentAtPos0; 

     case 1: // Fragment # 1 
      return new ListFragment(); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return titles.length; 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     if (object instanceof MainFragment && mFragmentAtPos0 instanceof ErrorFragment) { 
      return POSITION_NONE; 
     } 
     if (object instanceof MainFragment && mFragmentAtPos0 instanceof MainFragment) { 
      return POSITION_NONE; 
     } 
     return POSITION_UNCHANGED; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titles[position]; 
    } 
} 

public interface MainFragmentListener { 
    void onSwitchToNextFragment(); 
} 

Я попытался изменить фрагменты с:

FragmentManager fragmentManager2 = getFragmentManager(); 
FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction(); 
ErrorFragment fragment2 = new ErrorFragment(); 
fragmentTransaction2.addToBackStack("xyz"); 
fragmentTransaction2.hide(MainFragment.this); 
fragmentTransaction2.add(android.R.id.content, fragment2); 
fragmentTransaction2.commit(); 

Но когда я сажусь на другую вкладку, фрагменты перекрываются ... Что делать? Благодаря!

(Большие пальцы вниз является ErrorFragment, кнопку и Вкл/Выкл, находится в ListFragment)

enter image description here

ответ

0

Попробуйте удалить fragmentTransaction2.hide (MainFragment.this); и изменить fragmentTransaction2.add (android.R.id.content, fragment2); - фрагментTransaction2.replace (android.R.id.content, фрагмент2);

+0

Фрагмент с большими пальцами теперь перекрывает оба из двух других фрагментов ... – moritzg

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