FragmentStatePagerAdapter를 사용하여 ViewPager를 구현하고 있습니다. 코드 샘플은 다음과 같습니다. 다음과 같이방향 변경시 조각보기에 액세스
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Log.d("--GetItem", "---");
switch (position) {
case 0:
return ScreenSlidePageFragment.newInstance(b1);
case 1:
return ScreenSlidePageFragment.newInstance(b2);
case 2:
return ScreenSlidePageFragment.newInstance(b3);
default:
return null;
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.d("--InstItem", "--");
return super.instantiateItem(container, position);
}
@Override
public int getCount() {
return NUM_PAGES; //set as 3
}
}
ScreenSlidePageFragment이다. MainActivity에서
public class ScreenSlidePageFragment extends Fragment implements View.OnClickListener{
Bundle b;
public ScreenSlidePageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("----onCreateFrgmnt--", "11");
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("----onCreateViewFrgmnt-", "11");
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragment_screen_slide_page, container, false);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.d("----onViewCreatedFrgmnt", "11");
b = getArguments();
TextView tv_city = (TextView) view.findViewById(R.id.city_field);
TextView tv_update = (TextView) view.findViewById(R.id.updated_field);
TextView tv_day = (TextView) view.findViewById(R.id.day);
tv_day.setText("DAY " + String.valueOf(b.getInt("day")));
tv_city.setText(b.getString("city"));
tv_update.setText("Last update on : " + b.getString("date"));
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public static ScreenSlidePageFragment newInstance(Bundle myBundle) {
ScreenSlidePageFragment f = new ScreenSlidePageFragment();
f.setArguments(myBundle);
return f;
}
}
, 나는 방향 변경을 처리하기 위해 노력하고 있습니다. 다음 코드를 사용합니다.
if (savedInstanceState != null) {
setContentView(R.layout.activity_main);
myViewPager = (MyCustomViewPager) findViewById(R.id.pager);
b1 = savedInstanceState.getBundle("Fragment1");
b2 = savedInstanceState.getBundle("Fragment2");
b3 = savedInstanceState.getBundle("Fragment3");
myViewPager.setOffscreenPageLimit(NUM_PAGES - 1);
myPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
myViewPager.setAdapter(myPagerAdapter);
}
조각들은 방향 변경시 재현됩니다. onCreateView 및 onViewCreated (Check LogCat)이 호출되고 있습니다. 문제는 조각에서 뷰를 업데이트하려고 할 때 발생합니다. 업데이트를 위해 나는 다음과 같은 코드를 사용하고 있습니다 :
FragmentStatePagerAdapter adapter = (FragmentStatePagerAdapter) myViewPager.getAdapter();
ScreenSlidePageFragment fragment1 = (ScreenSlidePageFragment) adapter.instantiateItem(myViewPager, 0);
ScreenSlidePageFragment fragment2 = (ScreenSlidePageFragment) adapter.instantiateItem(myViewPager, 1);
ScreenSlidePageFragment fragment3 = (ScreenSlidePageFragment) adapter.instantiateItem(myViewPager, 2);
을하지만 fragment1.getView를 호출 할 때(), null을 반환합니다. 그러나 방향을 변경하지 않으면 동일한 코드가 잘 실행됩니다.
방향 변경시 조각보기를 어떻게 얻을 수 있습니까? 조각을 배열로 저장한다고 말한 일부 솔루션을 확인했지만 그 코드는 나를 위해 작동하지 않습니다. 내가 쓴 코드는 그 일을 할 수 없습니까? 고맙습니다.