1

私はsetRetainInstance(true)onを使用しSherlockListFragment、画面の回転中にそれ自体が破壊されたり再作成されたりしないことを期待しています。しかし、そうではありません。onActivityCreatedローテーションを実行するたびに呼び出します。

WatchlistFragment.java

package org.yccheok.jstock.gui;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockListFragment;

public class WatchlistFragment extends SherlockListFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "WatchlistFragment onCreate");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i(TAG, "WatchlistFragment onActivityCreated");

        // Not sure why. After I setRetainInstance to true, onActivityCreated is still
        // called for each screen rotation changes.
        setRetainInstance(true);

        setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, getTimeConsumingData()));
    }

    public String[] getTimeConsumingData() {
        Log.i(TAG, "WatchlistFragment getTimeConsumingData");
        return new String[] { "A", "B", "C"};
    }

    private static final String TAG = WatchlistFragment.class.getSimpleName();
}

JStockFragmentActivity.java

package org.yccheok.jstock.gui;

import android.os.Bundle;
import android.util.Log;

import com.actionbarsherlock.app.SherlockFragmentActivity;

public class JStockFragmentActivity extends SherlockFragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "JStockFragmentActivity onCreate");
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.jstock_fragment_activity);
    }

    private static final String TAG = JStockFragmentActivity.class.getSimpleName();
}

jstock_fragment_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment class="org.yccheok.jstock.gui.WatchlistFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

ローテーションごとに次のlogcatを取得しています

02-25 20:11:10.562: I/JStockFragmentActivity(6989): JStockFragmentActivity onCreate
02-25 20:11:10.597: I/WatchlistFragment(6989): WatchlistFragment onCreate
02-25 20:11:10.613: I/WatchlistFragment(6989): WatchlistFragment onActivityCreated
02-25 20:11:10.613: I/WatchlistFragment(6989): WatchlistFragment getTimeConsumingData
02-25 20:11:12.078: I/JStockFragmentActivity(6989): JStockFragmentActivity onCreate
02-25 20:11:12.109: I/WatchlistFragment(6989): WatchlistFragment onCreate
02-25 20:11:12.121: I/WatchlistFragment(6989): WatchlistFragment onActivityCreated
02-25 20:11:12.121: I/WatchlistFragment(6989): WatchlistFragment getTimeConsumingData
02-25 20:11:17.492: I/JStockFragmentActivity(6989): JStockFragmentActivity onCreate
02-25 20:11:17.519: I/WatchlistFragment(6989): WatchlistFragment onCreate
02-25 20:11:17.527: I/WatchlistFragment(6989): WatchlistFragment onActivityCreated
02-25 20:11:17.527: I/WatchlistFragment(6989): WatchlistFragment getTimeConsumingData

ローテーション中に何度setRetainInstance(true)も作成してはいけないと思ったのですが?WatchlistFragment

4

2 に答える 2

0

ええ、それは呼び出しますが、呼び出しonActivityCreated()ません。したがって、再度呼び出されたくないコードを に移動します。onCreate()onCreateView()onCreate()

于 2013-02-25T12:09:34.230 に答える
0

これは仕様によると正しいです:

  • onDestroy()は呼び出されません (ただしonDetach()、フラグメントは現在のアクティビティから切り離されているため、呼び出されます)。
  • onCreate(Bundle)フラグメントが再作成されていないため、呼び出されません。
  • onAttach(Activity)onActivityCreated(Bundle)呼ばれます。
于 2013-02-25T12:08:52.740 に答える