HelloWorldの説明(Android)

(1)3つのkotlinプログラムで構成されている。MainActivityがメインの画面でその上に、FirstFragmentとSecondFragmentのどちらかが乗っかるように表示される。

(2)MainActivityには3つのFunction(fun)が実装されている。onCreate()は、画面全体を作る。onCreateOptionsMenu()は、オプションメニュー(右上の縦の点が3つあるボタンの機能)を作る。onOptionsItemSelected()は、オプションメニューの内容をクリックしたときの動作を作る。

f:id:kuukaix:20210425211820j:plain

(2-1)onCreate()は、引数にsavedInstanceStateを受け取る。kotlinではC言語(型 変数名)と順序が逆で、変数名 : 型 になる。 fun onCreate(savedInstanceState: Bundle?)は、nullを許すBundle型の値をsavedInstanceStateで受け取るという意味。 次のsuper.onCreate(savedInstanceState)は、基底クラスのonCreate()を呼び出すという意味。ここで行うonCreate()以外の諸々の仕事は基底クラスのonCreate()でやってもらう。 setContentView(R.layout.activity_main)は、画面のレイアウトを決定している。レイアウトの実体はres->layout->activity_main.xmlに記述されている。 setSupportActionBar(findViewById(R.id.toolbar))は、上にあるツールバーを設定している。R.id.toolbarの実体は、activity_main.xmlに含まれている。 findViewById<FloatingActionButton>(R.id.fab).setOnClickListener {なんたら}は、メイン画面の右下のメールアイコンが押されたときの動作を記述している。R.id.fabの実体は、activity_main.xmlに含まれている。ボタンが押されると{なんたら}の部分が実行される。

(2-2)onCreateOptionsMenu()は、引数にmenuを受け取る。fun onCreateOptionsMenu(menu: Menu): Booleanは、nullを許さないMenu型の値をmenuで受け取って、Functionの結果はBoolean型を返すという意味。 次のmenuInflater.inflate(R.menu.menu_main, menu)は、res->menu->manu_main.xmlで記述されるメインメニューを作るようにしている。

(2-3)onOptionsItemSelected()は、引数にitemを受け取る。fun onOptionsItemSelected(item: MenuItem): Booleanは、nullを許さないMenuItem型の値をitemで受け取って、Functionの結果はBoolean型を返すという意味。 次のreturn when (item.itemId) { R.id.action_settings -> true else -> super.onOptionsItemSelected(item) } は、item.itemIdがid.action_settingsならtrueを、それ以外なら基底クラスのonOptionsItemSelected()を呼び出すという意味。

(3)FirstFragmentには、2つのFunction(fun)が実装されている。onCreateView()は、フラグメント画面を作る。onViewCreated()は、画面の表示が終わった直後に実行され、ボタンの動作を定義している。

f:id:kuukaix:20210425211842j:plain

(3-1)onCreateView()は、引数を3つ持つ。 inflater.inflate(R.layout.fragment_first, container, false)は、画面のレイアウトを決定している。レイアウトの実体は、res->layout->fragment_first.xmlに記述されている。

(3-2)onViewCreated()は、引数を2つ持つ。 super.onViewCreated(view, savedInstanceState)は、基底クラスのonViewCreated()を呼び出すという意味。ここで行うonViewCreated()以外の諸々の仕事は基底クラスのonViewCreated()でやってもらう。 次の view.findViewById<Button>(R.id.button_first).setOnClickListener {なんたら}は、フラグメント画面のボタンが押されたときの動作を記述している。R.id.button_firstの実体は、fragment_first.xmlに含まれている。ボタンが押されると{なんたら}の部分が実行される。 なんたらの部分の findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)について、R.id.action_FirstFragment_to_SecondFragmentの実体は、res->navigation->nav_graph.xmlに含まれている。

(4)SecondFragmentもFirstFragmentと同様。

f:id:kuukaix:20210425211857j:plain

(5)activity_main.xmlを開くと、画像だけが表示される。Designになっている(右上にあるボタン)が、SplitかCodeを選ぶとよい。私はCodeが好み。

f:id:kuukaix:20210425214818j:plain

(5-1)xmlはこういうものと理解してもらうしかないが、 上から、ツールバー、中心部分(content_main)、フローティングボタンの3つで構成されている。

<com.google.android.material.appbar.AppBarLayout なんたら> なんやかんや </com.google.android.material.appbar.AppBarLayout> 〆 と

<androidx.appcompat.widget.Toolbar なんやかんや /> 〆

の2種類が使われている。

content_mainは別のxmlファイルのcontent_main.xmlに記述されていて、navigation/nav_graphを経由して、fragment_first.xmlとfragment_second.xmlのどちらかが表示されるようになっている。

(6)fragment_first.xmlを開く

f:id:kuukaix:20210425220417j:plain

(6-1)上からテキストとボタンの2つで構成されている。 テキストは、android:text="@string/hello_first_fragment" ボタンの文字はandroid:text="@string/next" で記述されていて、res->values->strings.xmlを使って文字にしている。このように間接に文字を入れるのは、多国語対応したいときは、stringsの部分を各国語に翻訳すればよい。