-1

FragmentStatePagerAdapter를 사용하여 ViewPager로 활동을 만들고 있습니다. 하지만 내 휴대 전화를 회전려고 할 때, 그것은 충돌 및 오류와 함께 여기 액티비티를 회전 할 때 조각이 아직 첨부되지 않았습니다.

내 어댑터의 "조각이 아직 부착되지 않은"내 활동에

public class SalesPagingAdapter extends FragmentStatePagerAdapter { 

private CharSequence[] titles; 
private int tabCount; 
private List<Fragment> fragmentList = new ArrayList<>(); 

public SalesPagingAdapter(Context ctx, FragmentManager fm, CharSequence[] titles, int tabCount) { 
    super(fm); 

    this.titles = titles; 
    this.tabCount = tabCount; 

    for (int x = 0 ; x < tabCount ; x++) { 
     if (x == 0) fragmentList.add(new BaseFragment(new DashboardSales())); 
     else fragmentList.add(new BaseFragment()); 
    } 
} 

@Override 
public Fragment getItem(int pos) { 
    return fragmentList.get(pos); 
} 

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

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

public void SetTab(int idx, Fragment frag) { 
    BaseFragment basicFrag = (BaseFragment)fragmentList.get(idx); 
    basicFrag.getChildFragmentManager().beginTransaction().replace(R.id.container, frag).commit(); 
} 

public void SetLoadTab(int idx, Fragment frag) { 
    BaseFragment basicFrag = (BaseFragment)fragmentList.get(idx); 
    basicFrag.SetLoadFragment(frag); 
} 

public FragmentControl GetFragment(int idx) { 
    return (FragmentControl)fragmentList.get(idx).getChildFragmentManager().findFragmentById(R.id.container); 
}} 

,에서 onCreate는, 나는 불렀다 salesPagingAdapter = new SalesPagingAdapter (PreMainActivitySales.this, getSupportFragmentManager(), tabTitles, tabCount); viewPager.setAdapter (salesPagingAdapter); viewPager.setOffscreenPageLimit (1);

ViewPager를 스 와이프하면 int i = viewPager.getCurrentItem();을 호출합니다. FragmentControl baseFrag = salesPagingAdapter.GetFragment (i);

ViewPager를 스 와이프하지 않고 휴대 전화를 돌리면 괜찮습니다. 그러나 회전 할 때 이전 방향으로 돌아갈 때도 스 와이프하면 충돌하고 "조각이 아직 첨부되지 않았습니다."오류가 발생합니다. 활동의 당신의 AndroidManifest.xml에서

답변

0

, 당신은 당신이 writeandroid해야 새로운 활동을 정의 할 때 : screenOrientation = "지정을"

<activity 
    android:screenOrientation="unspecified" 
    android:name="com.example.MainActivity" 
    android:label="@string/app_name" > 

또는 아무것도 쓸 지정되지 않은 기본 값이기 때문이다. 프로그래밍 방향을 변경해야하는 경우

, 당신은이를 작성해야합니다 :

this.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE를); 또는

this.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

+0

시도해보십시오. 오류가 발생했지만 오리엔테이션이 변경되면 내 가로 레이아웃이 호출되지 않습니다. 내 매니페스트에서 방향을 처리하지 않으면 레이아웃이 방향에 따라 표시되지만, 처리하면 레이아웃이 변경되지 않습니다. –

+0

좋아요, 당신은 한 폴더 레이아웃을 만들 것입니다 - 입술에 착륙하고 그것을 실행하는 것보다 XML 파일을 붙여 넣으십시오. 나는 그것이 효과가있을 것이라고 생각한다. –

+0

이미 완료했습니다. 레이아웃과 레이아웃 랜드가 있습니다. 내 전화를 돌릴 때 레이아웃 랜드로 바뀌지 만 스 와이프하면 "단편이 아직 첨부되지 않았습니다."오류가 발생합니다. 내 매니페스트 (android : configChanges)에서 방향을 처리하면 전화를 돌릴 때 오류가 사라지지만 레이아웃은 레이아웃 랜드로 이동하지 않습니다. –

0
Try this type code four you fragment class like onAttach() and on onDetach(). 

public class TabFragment extends Fragment { 
public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 2; 
protected FragmentActivity mActivity; 
MyAdapter adapter; 
View x; 
Offers offersFragment; 

public TabFragment() { 
    // Required empty public constructor 
} 

public void onBackPressed() { 
    // do stuff 
    viewPager.setCurrentItem(0, true); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mActivity = (FragmentActivity) activity; 
} 


public void navigateFragment(int position){ 

    viewPager.setCurrentItem(position, true); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
    x = inflater.inflate(R.layout.content_main_menu, null); 
    tabLayout = x.findViewById(R.id.tabs); 
    viewPager = x.findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 
    //viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 
    viewPager.setOffscreenPageLimit(1); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 
    return x; 
} 

@RequiresApi(api = Build.VERSION_CODES.KITKAT) 
@Override 
public void onDetach() { 
    super.onDetach(); 

    try { 
     Field childFragmentManager = 
Fragment.class.getDeclaredField("mChildFragmentManager"); 
     childFragmentManager.setAccessible(true); 
     childFragmentManager.set(this, null); 

    } catch (NoSuchFieldException | IllegalAccessException e) { 
     throw new RuntimeException(e); 
    } 
} 


private void setupViewPager(ViewPager viewPager) { 
    adapter = new MyAdapter(getChildFragmentManager()); 
    adapter.addFragment(new HomeFragment(), "HOME"); 
    adapter.addFragment(new Offers(), "OFFERS"); 

    viewPager.setAdapter(adapter); 


}