2014-09-23 2 views
2

Я получаю проблему с ViewPager. Я использую FragmentActivity, и я добавил фрагмент внутри FragmentActivity следующим образом.Android ViewPager Внутри фрагмента загружен только один раз

public void addFragment(Fragment fragment, boolean addToBackStack, int transition) { 
     FragmentTransaction ft = getFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_up,R.anim.slide_down,R.anim.slide_up,R.anim.slide_down); 
     ft.replace(R.id.main, fragment); 
     ft.setTransition(transition); 
     if (addToBackStack) 
      ft.addToBackStack(null); 
     ft.commit(); 

} 

Я использую ViewPager внутри фрагмента. ViewPager отлично работает при загрузке FragmentActivity. но когда я использую другой фрагмент, ViewPager становится невидимым.

, например

а.) Фрагмент A с ViewPager

б.) Фрагмент B без ViewPager

фрагмента А работает нормально при запуске приложения. когда я перехожу к Фрагмент B Затем я снова заменяю фрагмент B на фрагмент A, тогда ViewPager не работает. Я вижу пустое представление, где я использую ViewPager.

Пожалуйста, дайте мне знать, как я могу решить эту проблему

Благодаря

+0

Проверить http://stackoverflow.com/questions/19485848/how-load-fragment-in-viewpager-only-when-its-selected Надеюсь, что это помогает :) –

+0

Проверка HTTP: // StackOverflow. com/questions/19485848/how-load-fragment-in-viewpager-only-when-its-selected Надеюсь, что он решает проблему ур :) –

ответ

7

Я решил это сам вопрос был, когда вы используете ViewPager внутри fragme nt использовать getChildFragmentManager() вместо getSupportFragmentManager() или getFragmentManager().

Все.

0

Я не могу комментировать, так что я собираюсь написать ответ здесь.

Почему вы не просто поставить ViewPager как фрагмент:

public class ViewPager extends Fragment{ 
public static final String TAG = ViewPager.class.getSimpleName(); 
private ViewPagerAdapter mAdapter; 

public static ViewPager newinstance(){ 
    ViewPager viewPager = new ViewPager(); 
    return viewPager ; 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.view_pager, container, false); 

    ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager); 
    mAdapter = new ViewPagerAdapter(getChildFragmentManager()); 
    viewPager.setAdapter(mAdapter); 
    return view; 
} 

} 

В адаптере:

public class ViewPagerAdapter extends FragmentPagerAdapter{ 

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

@Override 
public Fragment getItem(int arg0) { 
    return Fragment.newinstance(); 
} 

@Override 
public int getCount() { 
    return 5; //number of pages on your viewPager 
} 

Тогда на вашей основной деятельности вы можете сделать операцию, чтобы добавить вид пейджера

ViewPager viewPager = ViewPager.newInstance(); 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.content_frame,viewPager); 
    ft.addToBackStack(ViewPager.TAG); 
    ft.commit(); 
+0

У меня есть пользовательский вид Fragment, где я разместил ViewPager –

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