![](/img/trans.png)
[英]Handling Screen Rotation for Fragment inside of View(State)PagerAdapter inside Fragment
[英]how to store state of pager view with screen rotation
我想為具有尋呼機視圖的活動添加屏幕旋轉支持。 我想要的是當用戶更改屏幕方向時,應以新方向打開已打開的尋呼機視圖的選項卡。 但現在活動會重新啟動,並且每次第一個標簽打開。 請幫我。 提前致謝。
package com.example.ali.namallibrary;
import android.app.Fragment;
import android.content.Context;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.Serializable;
public class aboutLibrary extends AppCompatActivity {
CustomAdapter customAdapterpter = null;
TabLayout tabLayout;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about_library);
customAdapterpter = new CustomAdapter(getSupportFragmentManager(),getApplicationContext());
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(customAdapterpter);
tabLayout = (TabLayout) findViewById(R.id.tabBar);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
});
} // end of oncreate
private class CustomAdapter extends FragmentPagerAdapter {
private String[] fragmentNames = {"About","Collection","Timing","Contact"};
public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
super(supportFragmentManager);
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
switch (position)
{
case 0 :
return new aboutLibraryFrag();
case 1 :
return new libraryCollectionFrag();
case 2 :
return new libraryTimingFrag();
case 3 :
return new contactUsFrag();
default:
return null;
}
}
@Override
public int getCount() {
return fragmentNames.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentNames[position];
}
}
處理屏幕更改和/或旋轉的另一種方法是將android:configChanges
添加到您的活動中:
<activity android:name="com.example.myactivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" />
提及的ConfigChanges不會導致您的活動遭到破壞並被重新創建,Android只需旋轉屏幕,然后調用onConfigurationChanged
在此處手動處理案件。
您可以在活動中覆蓋onConfigurationChanged
來處理事件。
public class myactivity extends Activity
{
//..
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
}
每當旋轉屏幕時,活動都會被完全破壞並重新創建。 為了解決這個問題,有一個稱為onSaveInstanceState
的生命周期方法。 在這種方法中,您可以保存Bundle
對象。 Bundle
是您定義的一堆鍵值對,您需要在旋轉后對其進行處理。 在該捆綁包中,您可以存儲視圖尋呼機的當前位置。 我在ViewPagers方面工作不多,但是getCurrentItem可能正是您想要的。 您需要使ViewPager成為成員變量,並為鍵設置一個常量。 然后,我猜它看起來像:
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(CURRENT_POSITION_KEY, mViewPager.getCurrentItem());
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
onCreate
方法使用Bundle savedInstanceState
-如果Bundle savedInstanceState
中重新啟動活動,則此參數會將您保存的所有內容保存在onSaveInstanceState
。 因此,您可以在onCreate
:
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
int currentPos = savedInstanceState.getInt(CURRENT_POSITION_KEY);
mViewPager.setCurrentItem(currentPos)
}
有關在輪換之間加載和保存狀態的更多信息,請參見以下網址 : https : //developer.android.com/guide/components/activities/activity-lifecycle.html#saras
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.