두 개의 중첩 된 조각을 호스팅하는 조각을 호스팅하는보기 페이지가 있습니다. 그들은 잘 초기화하지만 화면을 회전하면 중첩 된 조각의 마지막 사라집니다 (Page2Fragment). 다시 회전하면 거기에 있습니다.오리엔테이션 변경시 조각이 사라짐
나는 그것이이 문제와 관련된 것 같아요 :
https://code.google.com/p/android/issues/detail?id=52112
하지만 그 문제는 해결 될 수 있다고하지만 나를 위해 작동하지 않습니다. 내 질문은 누군가가 이것에 대한 해결 방법이 있다면? 나는 아래 사용하는 코드를 게시 :
ViewPagerActivity :
package com.example.swekjaks.myapplication;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
public class ViewPagerActivity extends FragmentActivity {
/**
* The pager widget, which handles animation and allows swiping horizontally to access previous
* and next wizard steps.
*/
private ViewPager mPager;
/**
* The pager adapter, which provides the pages to the view pager widget.
*/
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.task_pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return new MainContainerFragment();
}
@Override
public int getCount() {
return 1;
}
}
}
MainContainerFragment :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:orientation="vertical"
android:id="@+id/frameLayout_fragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
<FrameLayout
android:orientation="vertical"
android:id="@+id/frameLayout_fragment2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
</LinearLayout>
Page1Fragment :
FragmentMainContainer에 대한package com.example.swekjaks.myapplication;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MainContainerFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main_container, container, false);
FragmentManager fragmentManager = getChildFragmentManager();
AddFirstFragment(fragmentManager);
AddNextFragment(fragmentManager);
return rootView;
}
private void AddFirstFragment(FragmentManager fragmentManager) {
Page1Fragment fragment = (Page1Fragment) fragmentManager.findFragmentById(R.id.frameLayout_fragment1);
if (fragment == null) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Page1Fragment page1Fragment = new Page1Fragment();
fragmentTransaction.add(R.id.frameLayout_fragment1, page1Fragment);
fragmentTransaction.commit();
} else {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayout_fragment1, fragment);
fragmentTransaction.commit();
}
}
private void AddNextFragment(FragmentManager fragmentManager) {
Page2Fragment fragment = (Page2Fragment) fragmentManager.findFragmentById(R.id.frameLayout_fragment2);
if (fragment == null) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Page2Fragment page2Fragment = new Page2Fragment();
fragmentTransaction.add(R.id.frameLayout_fragment2, page2Fragment);
fragmentTransaction.commit();
} else {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayout_fragment2, fragment);
fragmentTransaction.commit();
}
}
}
보기
는 Page2Fragment : 나는 다음 코드 조각을 추가하여 최종적으로이 문제를 해결
package com.example.swekjaks.myapplication;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Page2Fragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragment_page_2, container, false);
return rootView;
}
}