Оставаться на текущей вкладке после изменения ориентации.

В моем приложении выбранная вкладка на панели действий установлена ​​на первую, когда меняется ориентация, я бы хотел, чтобы она осталась на выбранной вкладке и не переходила к первой вкладке в строке …

Solutions Collecting From Web of "Оставаться на текущей вкладке после изменения ориентации."

Вы можете сделать это очень легко, используя 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); } } 

Для 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); } } 

Поскольку getLastNonConfigurationInstance() устарел, в FragmentActivity просто переопределите onRetainCustomNonConfigurationInstance () и используйте новый getLastCustomNonConfigurationInstance() :

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

И onCreate() его в свой onCreate() следующим образом:

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