从ViewPager启动新活动并返回同一页面

时间:2013-08-11 16:53:49

标签: android android-fragments android-activity android-viewpager

在我的应用中,有一个包含3个片段的viewpager 在其中一个片段中,我正在开始另一项活动 我希望用户返回到之前/之后他所在的同一个viewpager页面。

我使用托管viewpager的onPauseonResume方法的活动成功实现了它。它工作但问题是onResumeonCreate之后被解雇,这导致应用程序从同一页面开始(而不是“默认”,我在{{1}中设置的不同页面方法)。

然后我尝试将onCreate代码放在启动活动的onResume方法中,但这根本不起作用。

推出活动:

onOptionsItemSelected

主要活动:(托管viewpager)

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);

        vpPref = getPreferences(MODE_PRIVATE);
        int value = vpPref.getInt("viewPagerPage", -1);
        if (value != -1) {
            MainActivity.instance.mPager.setCurrentItem(value);
            vpPrefEditor = vpPref.edit();
            vpPrefEditor.remove("viewPagerPage");
            vpPrefEditor.commit();
        }   

        return true;
    }
    return super.onOptionsItemSelected(item);
}

问题在于第一个代码。我不知道这是一个放置问题还是错误的public void onPause() { super.onPause(); vpPref = getPreferences(MODE_PRIVATE); vpPrefEditor = vpPref.edit(); vpPrefEditor.putInt("viewPagerPage", mPager.getCurrentItem()); vpPrefEditor.commit(); } 实例错误...

导致此行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

ViewPager访问MainActivity这是一种不好的方法(我希望MainActivity.instance不是一个持有对MainActivity实例的引用的静态字段)。您应该让MainActivity完全处理ViewPager的位置:

onPause()的{​​{1}}中,您将保留当前代码。在MainActivity的{​​{1}}方法中,您将拥有:

onResume()

MainActivity首选项将根据@Override public void onResume() { super.onResume(); vpPref = getPreferences(MODE_PRIVATE); final int value = vpPref.getInt("viewPagerPage"); final boolean shouldRestore = vp.getboolean("restoreStatusFlag"); // we are again in the MainActivity so also make // restoreStatusFlag as false in the preferences if (shouldRestore) { mPager.setCurrentItem(value); } } 中已启动的活动进行设置。这样,如果启动shouldRestore,您将保留默认页面(onCreate将为false,因为已启动的活动尚未运行)。如果在MainActivity之后您转到已启动的活动shouldRestore将成为MainActivity(您需要在shouldRestore中设置)并在您返回时true将设置为onCreate中的右侧页面。

这留下一个用户可以进入已启动活动的场景(ViewPager将为真),但永远不会带回BACK onResume()。为此,您可以从shouldRestore开始MainActivity(我假设清单中提到的那个作为启动器活动)测试类别:

Intent