2012-11-21 79 views

回答

25

實際上,你可以做到這一點很容易使用onSavedInstanceState:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    int i = getActionBar().getSelectedNavigationIndex(); 
    outState.putInt("index", i); 
} 

然後包括這在你的onCreate()方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      ... 
    if(savedInstanceState != null) { 
     int index = savedInstanceState.getInt("index"); 
     getActionBar().setSelectedNavigationItem(index); 
    } 
} 
+0

完美解決方案! –

+0

getSelectedNavigationIndex()'在API級別21已棄用。該函數的替代選項是什麼? – Shnkc

+0

@Shnkc看到我的答案 – IHeartAndroid

-1

由於getLastNonConfigurationInstance()已被棄用,在FragmentActivity只需覆蓋onRetainCustomNonConfigurationInstance(),並使用新的getLastCustomNonConfigurationInstance()

@Override 
public Object onRetainCustomNonConfigurationInstance() { 
    return mViewPager.getCurrentItem(); 
} 

,並在您onCreate()找回它是這樣的:

Integer lastTab = (Integer) getLastCustomNonConfigurationInstance(); 
if (lastTab != null) { 
    mViewPager.setCurrentItem(lastTab); 
} 
0

對於21+與工具欄這個工作對我來說:

import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

public class MainActivity extends AppCompatActivity { 



    private ViewPager viewPager; 
    private static final String FLAG_CURRENTLY_SELECTED_TAB_INDEX = "currentlySelectedTabIndex"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mylayout); 


     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.setHomeAsUpIndicator(R.mipmap.ic_launcher); 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     viewPager.setAdapter(getMyCustomAdapter());    

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager);  

     if (savedInstanceState != null) { 
      final int currentlySelectedTabIndex = savedInstanceState.getInt(FLAG_CURRENTLY_SELECTED_TAB_INDEX, -1); 
      if (currentlySelectedTabIndex > -1) { 
       viewPager.setCurrentItem(currentlySelectedTabIndex); 
      } 
     } 

    } 

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     if (viewPager != null) { 
      int i = viewPager.getCurrentItem(); 
      outState.putInt(FLAG_CURRENTLY_SELECTED_TAB_INDEX, i); 
     } 
    }