1

onCreateView()を使用して、フラグメント内の子ビューへの参照を取得し、このビューの同じフラグメント内にゲッターメソッドを書き込むことができます。このメソッドは、アクティビティによって呼び出され、ビューへの参照を取得します。同様:アクティビティのonCreate()内のFragmentの子ビューへの参照を取得できますか?

@Override 
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) { 
    LinearLayout rootLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.my_fragment, container, false); 
    javaCameraView = (JavaCameraView) rootLinearLayout.findViewById(R.id.myFragment_javaCameraView);//*********** 
    return rootLinearLayout; 
} 

JavaCameraView getCameraView() { 
    return javaCameraView; 
} 

しかし、問題は、私は活動のonCreate()内部の子ビューを必要とするある、と私はフラグメントのonCreateView()が活動リターンのonCreate()後に呼び出されると思います。 Reference

アクティビティのonCreate()の中に、フラグメントのビューへの参照を取得する方法はありますか?

+1

「javaCameraView」が作成されてから何かをしたいのであれば、なぜフラグメントでそれをしないのですか? – NoChinDeluxe

+1

その瞬間に存在しないものには、どのようにアクセスしますか? –

答えて

3

あなたは間違っています。フラグメントのUI要素をホスティングアクティビティに公開しないでください。フラグメントは、そのビューと機能をカプセル化する必要があります。実際にフラグメントをUIコンポーネントとしてのみ使用している場合は、カスタムビューを作成し、そのビューをアクティビティで使用します。

質問に答えるには、いいえ、アクティビティのonCreate()でフラグメントのビューへの参照を取得できません。その理由は、フラグメントのライフサイクルを通過するまで、フラグメントのビューは存在しないからです。それがいつ起こるのかは保証されていません。そのため、このような前提に基づいてコーディングするのは悪いことです。

フラグメントがアクティビティにイベントを返す必要がある場合は、アクティビティでリスナインタフェースを実装し、必要に応じてそのフラグメントを呼び出すようにします。

は、だからあなたの場合、あなたは

if (getActivity() instanceof Listener) { 
    ((Listener)getActivity()).onViewCreated(fragmentViews); 
} 

しかし、再び、それはそれは間違ってやっている、フラグメントのonCreateView()でこのような何かを行うことができます。

-1

onCreateView()を手動で呼び出すには、これを行うのは良い方法ではありません。

private JavaCameraView javaCameraView; 

@Override 
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) { 
    LinearLayout rootLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.my_fragment, container, false); 
    javaCameraView = (JavaCameraView) rootLinearLayout.findViewById(R.id.myFragment_javaCameraView); 
    return rootLinearLayout; 
} 

JavaCameraView getCameraView(LayoutInflater layoutInflater) { 
    if (javaCameraView == null) { 
     onCreateView(layoutInflater, null, null); 
    } 
    return javaCameraView; 
} 

次に、あなたのonCreate()yourFragment.getCameraView(getLayoutInflater())を使用することができます。

+2

それは恐ろしい、ひどい考えです。 Androidのみがライフサイクルメソッドを呼び出す必要があります。 –

+0

私は知っている、それはそれを行うには良い方法ではないと書いた –

関連する問題