3

インテントを使用して別のアクティビティを開始し、新しく作成されたアクティビティに余分なデータをインテントに持たせています。私はそれを行うためのチュートリアルに従っています。

このデータは、実際には階層内の最初のアクティビティのテキスト フィールドから読み取られ、エクストラとして他のアクティビティに渡されます。だから私のコードは次のようになります:

//Make the intent   

Intent intent = new Intent(this, SecondActivity.class);

/* Find the text field (view) which contains the data, and save it into a newly created text field (view of the same type)*/

EditText editText = (EditText) findViewById(R.id.iden1); //******************************

//Read that view's string data into a string called message

String message= editmessage.getText().toString();

//copy this message into the extra named extra_name, of intent.

intent.putExtra(extra_name, message);

私の質問はこの声明からです:

EditText editText = (EditText) findViewById(R.id.iden1);

私の質問は、明示的なキャスト (EditText) です。findViewById() によって返された EditText ビュー (layout.xml で定義され、android:id="@+id/iden1" によって識別された) を再び EditText ビューにキャストするのはなぜですか。ここでのビュー editText と、layout.xml で作成したビューの型は同じです。では、この型キャストのポイントは何ですか?

4

2 に答える 2

6

ポイントは、ジェネリックオブジェクトをfindViewById(int id)返すことです。Viewこのメソッドは、ビューの種類を理解するために xml を解析しません。IDE(Eclipse、と思います)によって構築された、ファイルによって配置された関係から新しいViewオブジェクトを作成するだけです。R.java

オブジェクトをキャストしていないため、ビューをキャストしているため、結果をキャストする必要があります。これは単なる仕様です。findViewById(int id)EditTextEditText

于 2013-11-03T10:45:02.623 に答える
3

findViewByIdを返しますView。派生クラスのメソッドを使用する必要がある場合は、キャストする必要があります。基本クラスのメソッドのみを使用する必要がある場合は、キャストを避けることができます

于 2013-11-03T10:41:37.127 に答える