2017-01-03 1 views
-1

두 조각 : FirstFragmentSecondFragment이 있습니다. FirstFragment에는 3 개의 페이지 (세 조각)가있는 ViewPager이 들어 있습니다. 활성화의 onCreate에서는 메인 레이아웃에 FirstFragment을 추가하고 3 페이지가 정상적으로 표시됩니다.안드로이드의 조각에 ViewPager 추가

문제 : FirstFragmentSecondFragment으로 바꾼 다음 컴백 FirstFragment 세 페이지가 사라집니다. 그런 다음 앞뒤로 스크롤 ViewPager 페이지가 표시되지만 첫 번째 및 세 번째 페이지 만 표시되고 두 번째 페이지는 사라집니다. 여기 FirstFragment

:

package com.example.bkmsx.afragment; 
 

 
import android.os.Bundle; 
 
import android.support.annotation.Nullable; 
 
import android.support.v4.app.Fragment; 
 
import android.support.v4.app.FragmentManager; 
 
import android.support.v4.app.FragmentPagerAdapter; 
 
import android.support.v4.view.ViewPager; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 

 
public class FirstFragment extends Fragment { 
 
    ViewPager mViewPager; 
 
    static MainActivity mainActivity; 
 
    public static FirstFragment newInstance(MainActivity activity){ 
 
     mainActivity = activity; 
 
     return new FirstFragment(); 
 
    } 
 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
 
     View view = inflater.inflate(R.layout.first_fragment, null); 
 
     mViewPager = (ViewPager) view.findViewById(R.id.view_pager); 
 
     ViewPagerAdapter adapter = new ViewPagerAdapter(mainActivity.getSupportFragmentManager()); 
 
     mViewPager.setAdapter(adapter); 
 
     return view; 
 
    } 
 

 
    private class ViewPagerAdapter extends FragmentPagerAdapter { 
 
     public ViewPagerAdapter(FragmentManager fm) { 
 
      super(fm); 
 
     } 
 

 
     @Override 
 
     public Fragment getItem(int position) { 
 
      String text = ""; 
 
      switch (position) { 
 
       case 0: text = "First Page"; 
 
        break; 
 
       case 1: text = "Second Page"; 
 
        break; 
 
       case 2: text = "Third Page"; 
 
        break; 
 
      } 
 
      return TextFragment.newInstance(mainActivity, text); 
 
     } 
 

 
     @Override 
 
     public int getCount() { 
 
      return 3; 
 
     } 
 
    } 
 
}

SecondFragment :

package com.example.bkmsx.afragment; 
 

 
import android.os.Bundle; 
 
import android.support.annotation.Nullable; 
 
import android.support.v4.app.Fragment; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.TextView; 
 

 
public class SecondFragment extends Fragment { 
 
    static MainActivity mainActivity; 
 

 
    public static SecondFragment newInstance(MainActivity activity) { 
 
     mainActivity = activity; 
 
     return new SecondFragment(); 
 
    } 
 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
 
     TextView textView = new TextView(mainActivity); 
 
     textView.setText("New Fragment"); 
 
     return textView; 
 
    } 
 
}

모든 sugg 에스티온? 미리 감사드립니다. FirstFragment에서

+0

mViewPager.setOffscreenPageLimit (3); –

답변

1

,이 코드를 사용하고 Divyesh 주석이 좋은 제안이 있기 때문에

public View view; // declare view as global variable 

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     if(view == null){ 
       view = inflater.inflate(R.layout.first_fragment, null); 
       mViewPager = (ViewPager) view.findViewById(R.id.view_pager); 
       ViewPagerAdapter adapter = new ViewPagerAdapter(mainActivity.getSupportFragmentManager()); 
       mViewPager.setAdapter(adapter); 
     } 
     return view; 
    } 

시도가이 코드를 시도

mViewPager.setOffscreenPageLimit(3); 
+0

Raval 감사합니다. 귀하의 답변은 매우 간단하며 많은 시간을 절약 할 수 있습니다. 그러나 무엇을위한'mViewPager.setOffscreenPageLimit (3);'? – hyperloop

0

사용 ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 대신 mainActivity.getSupportFragmentManager()

0

의 추가해야 희망 도움이

 final ViewPager viewPager = (ViewPager) findViewById(R.id.container); 
    final PagerAdapter adapter = new PaginationAdapter(getSupportFragmentManager(),tabLayout.getTabCount()); 

    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    viewPager.setOffscreenPageLimit(3); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 

      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
관련 문제