0

我正在使用ABS和ViewPagerIndicatior。我有三个片段与自定义列表视图在我的视图分页器中填充自定义适配器。现在,当我从土地到港口或反之亦然改变方向,onActivityCreated再次调用时方向的变化和观点再次重现SlidingFragmentActivity:如何保存具有不同片段的视图寻呼机的实例

主要活动:

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行为一样雅虎知识堂的应用程序。

视图寻呼机适配器是:

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

THX,但视图重新再次 –

+0

是的,但它是一个正常的。如果你想避免这种情况,你必须在清单中为这个活动添加android:configChanges =“orientation | screenSize”... – Pauland

+0

非常感谢我的问题解决我检查了你的答案 –

相关问题