3

在 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>
4

0 回答 0