2017-08-02 8 views
2

は私がプロジェクトに次のコードを見つけました(変数/クラス名が変更された):引数をこのようにしてFragmentに渡すことはできますか?

private FragmentParams params; 

public static MyFragment newInstance(FragmentParams params) { 
    MyFragment fragment = new MyFragment(); 
    fragment.params = params; // <- Manually setting params in fragment class 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_fragment, container, false); 
    ButterKnife.bind(this, view); 

    /* The following line initializes a class responsible for the user 
    interface. The params are used for that purpose. However, out of 
    nowhere, the params where null 2 times.*/ 

    presenter.setParams(params); 
    return view; 
} 

プロジェクトは数週間のために生きてきたとpresenterは、コード内でさらに(のparamsにアクセスしたとき夫婦NullPointerExceptionが報告されました)。

setArguments()を使用するのが正しいことは分かっていますが、尋ねたい質問は次のとおりです。尖った線が問題になることはありますか?

私はAndroidが何らかの理由で再作成したフラグメントおよびparamsが原因呼び出されていない方法newInstancenullになったことであるのだと思うことができる唯一のことは、このように、paramsが設定されていません。

+0

いいえできません。あなたは 'Bundle'にそれを渡す必要があります。 – Piyush

+1

コードのいくつかの場所で 'Fragment()'のようなクラスをインスタンス化していて、 'newInstance'がなければ' params'は 'null'です。 –

+0

@Piyush最後の段落を読んで、あなたが私の疑惑についてどう思いますか教えてください? – JonZarate

答えて

0

活性が再作成されるときに、引数値が失われるのではい、それは問題となり得ます。あなたができることは、onSaveInstanceState経由で破壊しようとするアクティビティのたびに引数値を保存することです。例を見ることができますhere

関連する問題