ABS と ViewPagerIndicatior を使用しています。カスタムアダプターでいっぱいのビューページャーに、カスタムリストビューを持つ3つのフラグメントがあります。向きを陸地から港に、またはその逆に変更すると、向きが変更されてビューが再作成されると、onActivityCreated が再度呼び出されます。
主な活動:
public class MyActivity extends SlidingFragmentActivity implements ViewPager.OnPageChangeListener{
protected SliderLeft sliderLeft;
protected SliderRight sliderRight;
ActionBar mActionBar;
ViewPager mViewPager;
TitlePageIndicator mPageIndicator;
FragmentPagerAdapter mPagerAdapter;
SubMenu subMenu1;
private Menu mainMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// set the Behind View
setBehindContentView(R.layout.slider_menu_frame);
// customize the SlidingMenu
SlidingMenu sm = getSlidingMenu();
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setShadowDrawable(R.drawable.shadowleft);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
//int heightOfScreen = metrics.heightPixels;
int width = metrics.widthPixels;
sm.setBehindWidth(width / 2); //sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
setSlidingActionBarEnabled(true);
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
mActionBar = getSupportActionBar();
// set viewPager and viewPagerIndicator
mViewPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setOffscreenPageLimit(3);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOnPageChangeListener(this);
mPageIndicator = (TitlePageIndicator) findViewById(R.id.indicator);
mPageIndicator.setOnPageChangeListener(this);
mPageIndicator.setViewPager(mViewPager);
mPageIndicator.setCurrentItem(1);
}
}
私のアプリケーションの UI は yahoo answer アプリと同じように動作します。
ビュー ページャー アダプターは次のとおりです。
public class FragmentPagerAdapter extends FragmentStatePagerAdapter {
public FragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
switch (i){
case 0:
Fragment_Review fragment_review = new Fragment_Review();
Bundle args0 = new Bundle();
args0.putInt(Fragment_Activities.ARG_OBJECT, i);
fragment_review.setArguments(args0);
fragment = fragment_review;
break;
case 1:
Fragment fragment_activities = new Fragment_Activities();
Bundle args1 = new Bundle();
args1.putInt(Fragment_Activities.ARG_OBJECT, i);
fragment_activities.setArguments(args1);
fragment = fragment_activities;
break;
case 2:
Fragment_Answer fragment_answerit = new Fragment_Answer();
Bundle args2 = new Bundle();
args2.putInt(Fragment_Activities.ARG_OBJECT, i);
fragment_answerit.setArguments(args2);
fragment = fragment_answerit;
break;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
CharSequence pageTitle = "";
switch (position){
case 0:
pageTitle = "tiile";
break;
case 1:
pageTitle = "title";
break;
case 2:
pageTitle = "tille";
break;
}
return pageTitle;
}
}
ビュー ページャー内のすべてのフラグメントは、SherlockFragment から拡張されます。
public class Fragment_Review extends SherlockFragment implements PullToRefreshBase.OnRefreshListener<ListView> {
private List<Data> allData;
private CustomListAdapter customListAdapter;
private PullToRefreshListView mPullRefreshListView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_ptr_list_fragment, container, false);
mPullRefreshListView = (PullToRefreshListView) v.findViewById(R.id.pull_to_refresh_listview);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
allData = new ArrayList<Data>();
mPullRefreshListView.setMode(PullToRefreshBase.Mode.PULL_UP_TO_REFRESH);
customListAdapter = new CustomListAdapter(getActivity(), allData);
mPullRefreshListView.setOnRefreshListener(this);
mPullRefreshListView.setAdapter(lazyQuestionListAdapter);
new GetData().execute(getString(R.string.url) + "get_data.php");
}
}
サーバーからデータを受信すると、アダプターが更新されます。
向きの変更ですべてのフラグメントのインスタンスを保存する方法を教えてください。