在我的應用程序中,當方向改變時,操作欄中的選定標籤被設置爲第一個標籤,我希望它保持在選定標籤上,而不是跳轉到在第一線標籤...方向改變後留在當前標籤欄中操作欄Android
5
A
回答
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);
}
}
-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);
}
}
相關問題
- 1. Android:更改操作欄中的標籤
- 2. Android的標籤操作欄
- 3. Android操作欄 - 標籤
- 4. Android操作欄和標籤
- 5. 在操作欄下方添加標籤
- 6. 將標籤放在操作欄下方
- 7. 的Android 4.2標題欄在操作欄
- 8. 從操作欄到標籤的漸變
- 9. Android操作欄,兩行文本標籤
- 10. 帶有標籤的Android操作欄
- 11. Android蜂窩標籤類似操作欄
- 12. Android:沒有操作欄的Swipey標籤
- 13. 與操作欄標籤
- 14. 標籤使用操作欄
- 15. 操作欄下方的標籤
- 16. 只在操作欄中顯示標籤
- 17. Android:在操作欄下方添加標籤
- 18. 更改操作欄圖標
- 19. 更改操作欄圖標
- 20. Android操作欄圖標
- 21. 導航欄中的當前標籤
- 22. tabbedpanel - 留在當前標籤,但改變標籤的內容
- 23. 在android中的操作欄圖標
- 24. Android工作室 - 標籤 - 從刷卡視圖更改爲操作欄標籤
- 25. Android操作欄
- 26. Android操作欄,
- 27. Android標籤欄:訪問當前標籤頁活動
- 28. 如何向操作添加/更改Android Studio工具欄圖標?
- 29. 在Android的操作欄中顯示當前日期
- 30. 把android標籤放在操作欄的中心
完美解決方案! –
getSelectedNavigationIndex()'在API級別21已棄用。該函數的替代選項是什麼? – Shnkc
@Shnkc看到我的答案 – IHeartAndroid