0

メソッドとフィールドを含む複雑なオブジェクトを Fragment に渡す必要があります。複合オブジェクトは、フラグメントによって呼び出されるインターフェイスIComplexObjectを実装するため、私のフラグメントでは複合オブジェクト自体は表示されません。

フラグメントのインスタンスを作成するために、この投稿に触発された次のコードを使用します。

public class SimpleContentFragment extends Fragment {
    private IComplexObject complexObject;

    protected static SimpleContentFragment newInstance(IComplexObject complexObject) {

        SimpleContentFragment f = new SimpleContentFragment();
        f.complexObject = complexObject;

        return f;
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        complexObject.doSomeThings();
    }

}

これは通常、期待どおりに機能しますcomplexObjectが、フラグメントからアクセスしようとするonCreateViewと、NullPointerException が発生する場合があります。

この例外は、いくつかの古いデバイスと一部の Kindle デバイスでのみ発生しました。

私が間違っていることはありますか?オブジェクトをフラグメントに渡すにはどうすればよいですか?

4

2 に答える 2

1

これは、フラグメントが完全に再作成できるために発生します (たとえば、向きの変更中)。そのため、すべてのフィールドが null に等しいフラグメントの NEW オブジェクトが存在します。

オブジェクトに Parcelable のマークを付けても、オブジェクトに他のオブジェクトが含まれていて、それらのクラスが制御下にない場合 (ライブラリのクラスなど) は役に立ちません。

setRetainInstanceメソッドの側面を確認する必要があります。それが役立ちます。

于 2013-07-03T17:06:32.173 に答える