在 2.x 物理和虚拟设备上测试。未在 v3 上测试>
当应用程序启动时,无论是纵向还是横向模式,进度条都会显示在操作栏中。在 FragmentActivity 在方向更改后重新启动后,进度不再显示是从下面的 onCreate 代码调用(我检查了加载程序正在运行并且代码步骤将进度条设置为 Boolean.TRUE)还是从简单的按钮单击事件调用setProgressBarIndeterminateVisibility(Boolean.TRUE);
onSaveInstanceState -> onCreate 方法在方向更改时执行,因此 FragmentActivity 正在停止/启动。
我检查了参考资料以确保我使用的是 android.support.v4.view。还将 ViewPagerIndicator 与选项卡/片段一起使用 - 这不应该有任何影响。
方向更改/FragmentActivity 重新启动后,由片段添加到操作栏的刷新按钮显示正常。
实际上...我刚刚注意到在方向更改后查看 logcat 调试时有些奇怪。FragmentActivity 似乎开始两次查看写入日志的行,再次调用 onSaveInstanceState ,然后再次调用 onCreate ???
01-28 10:25:45.446: D/DonorDetailsContainerFragmentActivity(4728): onCreate
01-28 10:26:02.457: D/DonorDetailsContainerFragmentActivity(4728): loaderHasStarted
01-28 10:26:02.457: D/DonorDetailsContainerFragmentActivity(4728): onCreateLoader 0
01-28 10:26:04.437: D/DonorDetailsContainerFragmentActivity(4728): onLoadFinished 0
01-28 10:26:04.447: D/DonorDetailsContainerFragmentActivity(4728): loaderHasFinished
**Flip to landscape here**
01-28 10:29:07.567: D/DonorDetailsContainerFragmentActivity(4728): onSaveInstanceState
01-28 10:29:08.197: D/DonorDetailsContainerFragmentActivity(4728): onCreate
01-28 10:29:08.427: D/DonorDetailsContainerFragmentActivity(4728): loaderHasStarted
01-28 10:29:08.427: D/DonorDetailsContainerFragmentActivity(4728): onCreateLoader 0
**Nothing happened here - I only changed orientation once**
01-28 10:29:08.458: D/DonorDetailsContainerFragmentActivity(4728): onSaveInstanceState
01-28 10:29:08.686: D/DonorDetailsContainerFragmentActivity(4728): onCreate
01-28 10:29:17.236: D/DonorDetailsContainerFragmentActivity(4728): onLoadFinished 0
01-28 10:29:17.236: D/DonorDetailsContainerFragmentActivity(4728): loaderHasFinished
public class DonorDetailsContainerFragmentActivity extends FragmentActivity
implements OnLoaderListener,
LoaderManager.LoaderCallbacks<LoaderStatus> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This has to be called before setContentView and you must use the
// class in android.support.v4.view and NOT android.view
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
Log.d(LOG_TAG, "onCreate");
mAdapter = new ViewPagerTitleAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.tabindicator);
indicator.setViewPager(mPager);
// first check if we already have a running loader
if ((savedInstanceState != null)
&& savedInstanceState.containsKey("RUNNING_LOADERS")) {
mRunningLoaders = savedInstanceState.getParcelable("RUNNING_LOADERS");
}
if (mRunningLoaders == null) {
mRunningLoaders = new RunningLoadersList();
}
if (mRunningLoaders != null) {
for (int i = 0; i < mRunningLoaders.size(); i++) {
StartLoader(mRunningLoaders.get(i).id,
mRunningLoaders.get(i).args);
}
}
if (getSupportLoaderManager().hasRunningLoaders()) {
setProgressBarIndeterminateVisibility(Boolean.TRUE);
} else {
setProgressBarIndeterminateVisibility(Boolean.FALSE);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("RUNNING_LOADERS", mRunningLoaders);
Log.d(LOG_TAG, "onSaveInstanceState");
}
Nothing particularly interesting in the manifest.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.savant.donordetailsviewpagertitle"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="13"/>
<!-- Enable access to the the internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Enable access to the the network state -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name="com.savant.donordetailsviewpagertitle.classes.DonorDetailsViewPagerTitle"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/StyledIndicators">
<activity android:name=".activities.DonorDetailsContainerFragmentActivity"
android:label="@string/app_name">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>