7

私はまだ Android プログラミングに慣れていないので、この質問はかなり基本的なものです。のような UI コンポーネントが初期化され、ActivityTextViewのメソッドでアクセスされるコード サンプルがインターネット上にたくさんあります。onCreate()

Android Studio を使用して新しいプロジェクトを作成すると、デフォルト設定で、 bring along with itFirstAppという空のアクティビティがあり、これをすぐに APK にコンパイルしてデバイスにデプロイすると、ヘッダー付きの画面が表示されます」 FirstApp」と「Hello world!」を示す左上の TextView。MainActivityactivity_mainfragment_main

TextViewの ID を指定textview1してメンバー変数 を作成すると、次のようにアクティビティTextView myTextView;のメソッドでそれを参照できます(もちろん、コンパイラ エラーは発生しません)。onCreate()

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);
        myTextView = (TextView) findViewById (R.id.textview1);
        myTextView.setText ("Hello tablet!");

        if (savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction().add (R.id.container,new PlaceholderFragment()).commit();
        }
    }

ただし、APK をコンパイルして実行すると、「残念ながら、FirstApp が停止しました」という結果になります。メッセージ。

以前、UI コンポーネントにアクセスするスタートアップ コードをonStart()アクティビティのメソッドに移動することで、この問題を回避しました。

    @Override
    protected void onStart()
    {
        super.onStart();
        myTextView = (TextView) findViewById (R.id.textview1);
        myTextView.setText ("Hello tablet!");
    }

これにより、左上に "Hello Tablet!" と表示された単一の TextView を持つ動作する APK が生成されます。- 私の簡単な質問は 2 つあります...

  1. onCreate()プロジェクトが Fragments を使用している場合、おそらくまだ作成されていないため、インターネット上の多くのサンプル コードで発生しているように、Activityのメソッドで UI コンポーネントにアクセスできないことを完全に期待する必要がありますか?
  2. onStart()アクティビティのメソッド内で UI コンポーネントにアクセスすることは許容されますか(これ動作します)、または何か他のことを行う必要がありますか? 以前は Fragment のonCreateViewメソッドも使用していましたが、Fragment 内の UI コンポーネントに実際にアクセスするのに最適な場所は、onCreate()まだ試していない Fragment のメソッドですか?

またonCreate()、新しいプロジェクトを作成するときにAndroid Studioが作成するデフォルトのフラグメントのメソッドにはスタブが提供されていません...しかし提供されてonCreateViewおり、ライフサイクルのドキュメントは(とにかく私にとって)これ最善である可能性があることを示唆していますこのようなことをする場所。

これに関するガイダンスをいただければ幸いです。

4

2 に答える 2