0

我正在使用 ABS 和 ViewPagerIndicatior。我的视图寻呼机中有三个带有自定义列表视图的片段,其中填充了自定义适配器。现在,当我将方向从陆地更改为港口或反之亦然时,当方向更改并重新创建视图时,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");
}
}

当从服务器接收数据时,适配器将被更新。

请指导我如何在方向更改中保存所有片段的实例。

4

1 回答 1

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");
}
于 2013-04-17T09:39:44.933 回答