0

Я использую ABS и ViewPagerIndicatior. У меня есть три фрагмента с пользовательским списком в пейджере моего представления, который заполняет пользовательский адаптер. Теперь, когда я изменить ориентацию от земли к порту, или наоборот, onActivityCreated снова вызывает при изменении ориентации и взглядов воссоздать сноваSlidingFragmentActivity: как сохранить экземпляр представления пейджера с другим фрагментом

Основной вид деятельности: UI

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); 

} 


} 

моего приложения действует так же, как Yahoo ответ приложение.

Пейджер адаптер мнение:

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"); 
} 
} 

при получении данных с сервера адаптер будет обновляться.

, пожалуйста, расскажите мне, как сохранить экземпляр всего фрагмента в изменении ориентации.

ответ

1

Как что (в фрагменте):

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
    allData = new ArrayList<Data>(); 
    customListAdapter = new CustomListAdapter(getActivity(), allData); 
} 
@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    mPullRefreshListView.setMode(PullToRefreshBase.Mode.PULL_UP_TO_REFRESH); 
    mPullRefreshListView.setOnRefreshListener(this); 
    mPullRefreshListView.setAdapter(lazyQuestionListAdapter); 

    //ADD condition for load data from network (like only if adapter.isEmpty()) 
    new GetData().execute(getString(R.string.url) + "get_data.php"); 
} 
+0

ТНХ, но вид воссоздан снова –

+0

Да, но это нормально. Если вы хотите избежать этого, вы должны добавить android: configChanges = "orientation | screenSize" для этого действия в вашем манифесте ... – Pauland

+0

Спасибо, что моя проблема решена. Я проверил ваш ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^