2016-10-08 3 views
1

Когда я перехожу из TabFrag3 на TabFrag1, TabFrag1 автоматически перезагружает весь фрагмент. Мне нужно остановить «onCreateView», когда я переключаюсь с Tabfrag3 на TabFrag1. Как остановить функцию, если она уже была загружена? Хотелось бы, чтобы это сработало только с самого начала.Как остановить «onCreateView» в фрагментах переключателя

Edit:

MainActivity:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       TabFragment1 tab1 = new TabFragment1(); 
       return tab1; 
      case 1: 
       TabFragment2 tab2 = new TabFragment2(); 
       return tab2; 
      case 2: 
       TabFragment3 tab3 = new TabFragment3(); 
       return tab3; 
      default: 
       return null; 
     } 
    } 
} 

TabFragment1

public class TabFragment1 extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View inflatedView = inflater.inflate(R.layout.tab_fragment_1, container, false); 
     final ListView list= (ListView) inflatedView.findViewById(R.id.list); 
     new function();//this function load json data 
     return inflatedView; 
} 

Это onCreateView зарядки данные снова и снова ...

Edit 2: Я нашел решение здесь : https://stackoverflow.com/a/36518677/6910082

+0

Опишите, что вы пытаетесь сделать, и покажите код. До сих пор не хватает информации. Если вы используете viewpager с несколькими фрагментами, то, возможно, попробуйте setOffscreenPageLimit() –

+0

Это то, что вы хотите, чтобы страницы не обновлялись при навигации по вкладкам. – Naz141

+0

Попробуйте просмотреть код. «Это то, что вы хотите, чтобы страницы не обновлялись при навигации по вкладкам» => да, я не хочу обновлять этот фрагмент. – Helpme

ответ

0

Вы должны использовать add instead от replace. перед тем как добавить новый Fragment, вы должны проверить, если он уже выйдет в FragmentManager, если это так, скройте текущий вид Fragment & покажите другой, если он не существует, то add он и скрыть текущий вид Fragment.

, например:

@Nullable @Override public Fragment getFragmentByTag(@NonNull FragmentManager fragmentManager, @NonNull String tag) { 
    return fragmentManager.findFragmentByTag(tag);//returns fragment by its TAG. 
} 

@Nullable @Override public Fragment getVisibleFragment(@NonNull FragmentManager manager) { 
    List<Fragment> fragments = manager.getFragments(); 
    if (fragments != null && !fragments.isEmpty()) { 
     for (Fragment fragment : fragments) { 
      if (fragment != null && fragment.isVisible()) { 
       Logger.e(fragment.getClass().getSimpleName(), fragment.isVisible()); 
       return fragment;//return current visible fragment to hide 
      } 
     } 
    } 
    return null; 
} 

, то вы должны сделать что-то вроде:

Fragment currentVisibleFragment = getVisibleFragment(fragmentManager); 
Fragment fragmentToAddOrShow = getFragmentByTag(fragmentManager, FormsListView.TAG); 

, то вы должны проверить, если fragmentToAddOrShow является not null, если он затем скрыть currentVisibleFragment и показать fragmentToAddOrShow еще скрыть currentVisibleFragment и добавить fragmentToAddOrShow

+0

Извините, я не понимаю ваше решение. но каждый раз, когда я возвращаюсь в фрагменте1, у моего фрагмента 1 есть видимость = видимая и для этой myfunction oncreateview перезапускает все время. – Helpme

0

Использование hide() вместо перейдите в add() каждый раз, просто добавьте() только в первый раз.

+0

Можете ли вы показать мне пример? – Helpme

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