30

私は Android 用の最初のアプリをFragment作成中Activityです。私が直面している問題は、fromのメソッド内に含まれるビューが見つからないことです。ActivityonCreate()FragmentActivityonCreate()

他のスレッドは、これは がFragmentまだ膨張していないためであると示唆しているため、findViewById()内に含まれるすべてのビューに対して null を返しますFragment

これが私が意味することです:

アクティビティ:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("activity onCreate");
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null) {
        return;
    }

    initialiseUI(); // Fragment added to Activity

    System.out.println("end of activity onCreate");
}

断片:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
    return inflater.inflate(R.layout.event_log, container, false);
}

これにより、結果が出力されます。

アクティビティ onCreate アクティビティの終了 onCreate フラグメント onCreateView

この順序により、のメソッドFragmentでのビューに ( を使用して) アクセスしようとすると、 が生成されます。これは、 がの の終了後にのみ呼び出されるためです。ActivityonCreate()findViewById()NullPointerExceptionFragmentonCreateView()ActivityonCreate()

を追加した後に をFragmentManger使用しても役に立ちません。executePendingTransactions()Fragment

基本的に、問題のコードを の代わりに のメソッドに入れることを余儀なくされActivityました。onStart()onCreate()onStart()FragmentonCreateView()

ここでの標準的な慣行は何か、またはフラグメントビューにアクセスするコードをActivity'sonCreate()メソッド内で機能させる方法はありますか?

4

1 に答える 1

25

でビューを更新しますonCreateView()

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.event_log, container, false);
    TextView tv = (TextView) view.findViewById(R.id.text);
    tv.setText("hello world");
    return view;
}

または、変更が接続先に依存する場合ActivityFragment、 を使用しますonActivityCreated()

@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    TextView tv = (TextView) getView().findViewById(R.id.text);
    tv.setText(getActivity.getSomeText());
}
于 2012-08-25T15:28:58.640 に答える