目次:
ビデオ: Day 2 Keynote (GDD Europe '17) 2024
新しいJavaプロジェクトを開始すると、Android Studioはプロジェクトのアクティビティを作成します。 Android Studioには、基本アクティビティ、空のアクティビティ、ログインアクティビティなど、さまざまな種類のアクティビティが用意されています。空のアクティビティを求める場合は、次のコードを取得します。
package com。 allyourcode。 a10_11;
インポートアンドロイド。サポート。 v7。アプリ。 AppCompatActivity;
インポートアンドロイド。 os。バンドル;
public class MainActivityは、AppCompatActivityを拡張します。
@Override
protected void onCreate(Bundle savedInstanceState){
super。 onCreate(savedInstanceState);
setContentView(R。レイアウト。activity_main);
}
}
コードは
MainActivity
という名前のクラスを宣言します。この名前
MainActivity
は、Android APIライブラリの一部ではありません。これは、新しいAndroidプロジェクトを作成するときに補う名前です。
MainActivity
クラスは、新しいプロジェクトを作成する手順に従うときに、名前を受け入れるか、別の名前に変更します。
MainActivity
クラスは、 AndroidのSDKライブラリ、つまり
AppCompatActivity
クラスに追加します。言い換えると、
MainActivity オブジェクト
は、
AppCompatActivity
オブジェクトである。
MainActivity
オブジェクトは、
AppCompatActivity
インスタンスが持つすべての権利と責任を持ちます。たとえば、
MainActivity
には
onCreate
<!実際、 MainActivity
クラスは、Androidの
AppCompatActivity
クラスから約460行のコードを継承します。これは、Androidの
FragmentActivity
クラスは、AndroidのActivityクラスから約6,700行を継承しています。継承されたメソッドには、
getCallingActivity
、
getCallingPackage
、
getParent
、
getTitle
、
getTitleColor < onKeyLongPress
、
onLowMemory
、
onMenuItemSelected
、
setTitle
、
setTitleColor
、
startActivity
、終了、およびその他の多くのものが含まれる。この機能をすべて継承するには、extends
AppCompatActivity
という2つの簡単な単語を使用します。
家族関係の用語では、あなたの
MainActivity
クラスはAndroidの
活動
クラスの子孫です。あなたの
MainActivity
クラスは
Activity
の一種です。
Androidのオンラインドキュメントから直接取ったこの画像は、
AppCompatActivity
クラスに関するこの情報を要約しています。
AppCompatActivityファミリーツリー。
このページをブックマークすると、AndroidのAPIライブラリのドキュメントに簡単にアクセスできます。
AppCompatActivity
クラスは、サブクラスであることに加えて、
AppCompatCallback
インタフェース、
TaskStackBuilder
インタフェースなどの一連のインタフェースを実装します。あなたはこれを覚える必要はありません。あなたがそれを知る必要があるなら、あなたはAndroidのドキュメンテーションページでそれを見ることができます。
Javaのスーパーキーワードrevisited
super
は、スーパークラスのコンストラクタを表します。別のコードでは、
スーパー
キーワードをさまざまな方法で使用していました。はい、
スーパー
は常にクラスの親クラスと関係があります。しかし、いいえ、
super
は常に親クラスのコンストラクタを参照するとは限りません。
onCreate
メソッドでは、呼び出しは
superです。 onCreate(savedInstanceState)
は、
savedInstanceState
を親クラスの
onCreate
メソッドに送信します。親クラスは、
AppCompatActivity
クラスです。そこでJavaは
AppCompatActivit
yクラスの
onCreate
メソッドを呼び出します。
AppCompatActivity
クラスの
onCreat
メソッドには、
superに対する独自の呼び出しが含まれています。 onCreate(savedInstanceState)
AppCompatActivity
クラスの親は、
FragmentActivity
クラスです。 Javaは
savedInstanceState
を
FragmentActivity
クラスの
onCreate
メソッドに渡します。等々。
Activity
クラス(M
ainActivity
クラスの曽祖父母)に到達するまで、コードは
savedInstanceState
変数を直接使用しません。この
savedInstanceState
情報から、コードはアクティビティを、システムがそれを破壊する前の状態に戻します。
キャスティング、もう一度
findViewById
を呼び出すと、Javaはどのような種類のビューが見つかるかわかりません。
findViewById
メソッドは常に
View
インスタンスを返しますが、多くのAndroidクラスは
View
クラスを拡張します。たとえば、
ボタン
、
TextView
、
ImageView
、
CheckBox
、
クロノメーター
、および
はすべてAndroidの
View
クラスを拡張しています。次のコードを入力した場合:
//これをしないでください! !
TextView textView;
textView = findViewById(R。id。textView);
findViewById
の呼び出しで返されたオブジェクトが
TextView
クラスのインスタンスを参照していると仮定した場合、どのようにして返事が返されますか? (実際には、Androidスタジオのエディタに
互換性のないタイプ
エラーメッセージが静かに表示され、機械的に表示されます)。
Narrowing
は、999未満の
値を
> int
値。長い999の値は64ビットであり、999の整数の999の値は32ビットしかない。だから狭めようとする試みは失敗する。ここで見つけたコードでは、
findViewById
呼び出しが、
TextView
変数へのメソッド呼び出しによって返された
View 値の割り当てを絞り込む別の試みです。 TextView
クラスは View
クラスのサブクラスなので、割り当ては悲惨に失敗します。コードにキャスト演算子を追加することにより、Java(登録商標)の神を鎮静化する(999)。
findViewById
メソッド呼び出しのポップアップを
TextView
オブジェクトに変換するようJavaに指示します。
textView =
(TextView)
findViewById(R。id。textView1);
TextView
と古い
View
コードの違いを認識していることをキャスト演算子が示しています。 。実行時に
TextView
オブジェクトとして見つかった
View
オブジェクトを解釈するために最善を尽くします。 "(実際には、コードを入力している間、Javaは何も言わない)このキャスティングトリックを使用するとJavaがエラーメッセージを表示しないという事実は良い兆候である、Javaのキャスト機能がその日を節約する!)
コードを開発する際にエラーメッセージが表示されないようにします。そのようにして、キャストはJavaの非常に便利な機能です。しかし、コードに実行時エラーが含まれていると、キャストによって保存できません。
と入力すると、textView =(TextView)findViewById(R。id。textView1);
名前
textView
が
TextView
ウィジェットを表すことを確認します。アプリケーションが実行されると、Javaは
Rを取得します。 id。 activity_mainのtextView ウィジェット。 xml
ファイルであり、すべて正常に動作します。しかし、時にはあなたの
Rをチェックすることを忘れるかもしれません。 java
の名前をXMLファイルのコンポーネントと比較します。 findViewById
を呼び出すと、キャストが
TextView
ウィジェットを期待するようにJavaに指示すると
Button
コンポーネントが驚くほど吐き出されます。これが起こると、実行中にキャスト演算子のJavaチョークとアプリケーションがクラッシュします。ふりだしに戻る!