0

FragmentA と FragmentB の 2 つのフラグメントがあります。フラグメントAから、カスタムオブジェクトをパラメーターとしてフラグメントBのメソッドに渡すことにより、フラグメントBのビューを更新します。たとえば、以下はフラグメントBです。

public class FragmentB extends Fragment {

private ArrayList<String> customObj = new ArrayList<String>();

        public void updateViews(ArrayList<String> obj) {
                customObj = obj;

         }

    @Override
        public void onSaveInstanceState(Bundle outState) {
        System.out.println("Custom Object : "+customObj);//custom object is always  empty
        }

これで、画面を回転させるたびに、カスタム オブジェクトが常に空になります。

ここでは、フラグメント B のビューを更新しているだけです。オブジェクトは、フラグメント A からフラグメント B のメソッド updateViews にパラメーターとして渡されます。また、カスタム オブジェクトの静的を定義することを楽しみにしていません。

4

1 に答える 1

2

次の2つのことができます。1。アプリケーションクラス、サービスなど、向きが変更されるたびに作成されないカスタムオブジェクトをどこかに保存します。2。OnSaveInstanceState()内のパラメーターとして取得したバンドル内にそのオブジェクトを保存し、そのバンドルを使用します。 OnRestoreInstanceState()またはOnCreate()でオブジェクトを設定するには...

例えば、

@Override
protected void onCreate(Bundle savedInstanceState) {
    Logger.d("Dash onCreate");
    super.onCreate(savedInstanceState);

    ...
    // create fragments to use
    if (savedInstanceState != null) {
       //get your Object
    }
    if (yourObject != null)
        //restore the View using yourObject
    ...
} 

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

これで、カスタムクラスで、バンドル内に格納するためにSerializableまたはParcelableを実装する必要があります。シリアル化は簡単ですが、Parcellableを実装すると、より詳細に制御できます。

このトピックに関連するSOに関する他の同様のスレッドは次のとおりです。

同様の例

別の良い例

フラグメントのAndroidドキュメントで同様の例を取得できます。

于 2013-03-07T12:18:54.480 に答える