Tôi có một Hoạt động với nhiều Phân đoạn. Tôi cũng đang sử dụng actionbarSherlock cho các tab của mình cũng được kết nối với các đoạn.Lấy phân đoạn hiện tại và lưu trên phương thức onSaveInstanceState() để định hướng màn hình
Vấn đề của tôi là khi tôi xoay màn hình (chân dung thành ngang/ngược lại), hoạt động của tôi sẽ được gọi lại để khởi động lại hoạt động của tôi.
Tôi không muốn khởi động lại hoạt động của mình mà chỉ khôi phục đoạn hiện tại được hiển thị trước khi xoay. XIN VUI LÒNG không trả lời android:configChanges="orientation|keyboardHidden"
vì nó không giải quyết được vấn đề nhưng giống như một hack đơn giản của nó. Giải pháp của tôi là OnsaveInstanceState và onRestoreInstanceState Methods nhưng tôi không biết cách sử dụng nó với vấn đề của mình. Xin hãy giúp tôi với cái này. Bất kỳ phản ứng nào được đánh giá cao.
Mã sản phẩm:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tabA = actionBar.newTab().setIcon(R.drawable.about);
ActionBar.Tab tabE = actionBar.newTab().setIcon(R.drawable.faq);
ActionBar.Tab tabB = actionBar.newTab().setIcon(R.drawable.sponsors);
ActionBar.Tab tabC = actionBar.newTab().setIcon(R.drawable.map);
ActionBar.Tab tabD = actionBar.newTab().setIcon(R.drawable.destination);
Fragment aboutTab = new PhotosActivity();
Fragment sponsorTab = new SongsActivity();
Fragment mapTab = new HCCMapActivity();
Fragment questTab = new FaqActivity();
Fragment DestinationTab = new TourActivity();
tabA.setTabListener(new MyTabsListener(aboutTab));
tabB.setTabListener(new MyTabsListener(sponsorTab));
tabC.setTabListener(new MyTabsListener(mapTab));
tabD.setTabListener(new MyTabsListener(DestinationTab));
tabE.setTabListener(new MyTabsListener(questTab));
actionBar.addTab(tabD, 0, true);
actionBar.addTab(tabC, 1, false);
actionBar.addTab(tabA, 2, false);
actionBar.addTab(tabB, 3, false);
actionBar.addTab(tabE, 4, false);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putString("MyString", "Welcome back to Android");
//savedInstanceState.putString("id",)
// etc.
//getSupportFragmentManager().putFragment(savedInstanceState, "fragment", getSupportFragmentManager().findFragmentById(R.id.fragment_place));
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
FragmentManager fragmentManager ;
FragmentTransaction ft ;
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
String myString = savedInstanceState.getString("MyString");
Log.i("Hello", myString);
fragmentManager = getSupportFragmentManager();
ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.slide_out_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_place, getSupportFragmentManager().getFragment(savedInstanceState, "fragment"), null);
}
@Override
public void onConfigurationChanged (Configuration newConfig){
Log.i("hello", "Config");
super.onConfigurationChanged(newConfig);
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
//MenuItem menuitem1 = menu.findItem(R.id.menuitem1);
//menuitem1.setVisible(false);
menu.getItem(1).setVisible(false);
menu.getItem(0).setVisible(false);
return true;
}
protected class MyTabsListener implements TabListener{
Fragment fragment;
public MyTabsListener(Fragment fragment){
this.fragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (myTabPosition < 0){
//ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
}else{
if (myTabPosition > tab.getPosition()){
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
}else{
ft.setCustomAnimations(R.anim.slide_out_left, R.anim.slide_out_right);
}
}
myTabPosition = tab.getPosition();
ft.replace(R.id.fragment_place, fragment, null);
//ft.commit();
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(fragment);
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
Làm cách nào để lưu trạng thái phân đoạn của tôi? –
Thay vì 'actionBar.addTab (tabD, 0, true);' làm điều này: 'if (savedInstanceState == null) {actionBar.addTab (tabD, 0, true);} else {actionBar.addTab (tabD, 0, sai); } 'Điều đó sẽ cho phép đoạn hiện có được phục hồi. Chỉ báo tab của bạn có thể bị tắt mặc dù vậy bạn phải đặt chỉ báo nào được chỉ định. – MCeley