3

2.xの物理デバイスと仮想デバイスでテスト済み。v3ではテストされていません>

アプリが起動すると、ポートレートモードまたはランドスケープモードのいずれかで、プログレスバーがアクションバーに正常に表示されます。向きの変更に続いてFragmentActivityが再起動した後、進行状況は、以下のonCreateコードから呼び出されたか(ローダーが実行され、コードが進行状況バーをBoolean.TRUEに設定するようにステップインすることを確認しました)、または単純なボタンクリックイベントからsetProgressBarIndeterminateVisibility(Boolean.TRUE);

onSaveInstanceState-> onCreateメソッドは方向の変更時に実行されるため、FragmentActivityは停止/開始されます。

参照をチェックして、android.support.v4.viewを使用していることを確認しました。また、タブ/フラグメントでViewPagerIndicatorを使用します。これには関係がないはずです。

フラグメントによってアクションバーに追加された更新ボタンは、方向の変更/FragmentActivityの再起動後に正常に表示されます。


実は...向きを変えた後のlogcatのデバッグを見て奇妙なことに気づきました。FragmentActivityは、ログに書き込まれた行を2回確認し始め、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