新人として、inflate() のいくつかの基本を理解するのに再び苦労しています。
これが私のxmlファイルです-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/linearlayout"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:id="@+id/textview" />
</LinearLayout>
以下は基本的なコードです -
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout ly = (LinearLayout)findViewById(R.id.linearlayout);
Log.i("System.out ","linear layout = " + ly);
View view=getLayoutInflater().inflate(R.layout.activity_main,null);
LinearLayout ly1 = (LinearLayout)findViewById(R.id.linearlayout);
Log.i("System.out ","linear layout = " + view);
Log.i("System.out ","linear layout = " + ly1);
}
そして出力:
05-10 14:30:33.446: I/System.out(26806): linear layout = android.widget.LinearLayout@41e28848
05-10 14:30:33.446: I/System.out(26806): linear layout = android.widget.LinearLayout@41e29740
05-10 14:30:33.446: I/System.out(26806): linear layout = android.widget.LinearLayout@41e28848
出力の 1 行目と 3 行目から、呼び出すsetContentView()
と膨張するため、このメソッドの呼び出し後にビュー オブジェクトがメモリ内にあることがわかります。したがって、 を呼び出すとfindViewById()
、コード ブロックで両方の時間で linearlayout View の同じオブジェクトが返されます。(ly は ly1 に等しい)
しかし、出力の2行目でLinearLayoutオブジェクトのアドレスが違うのはなぜ
linear layout = android.widget.LinearLayout@41e29740
でしょうか?
これを担当するコードは -
View view=getLayoutInflater().inflate(R.layout.activity_main,null);
これでルート ビューが返されると思いました。この場合は LinearLayout です。
すでに膨張していて、レイアウトに変更がない場合R.layout.activity_main
(View/ViewGroup の追加も削除もしていない)、オブジェクトのアドレス (view & ly1) が一致しないのはなぜですか?
私はこれを試しました -
View view=getLayoutInflater().inflate(R.layout.activity_main,null);
setContentView(view);
LinearLayout ly1 = (LinearLayout)findViewById(R.id.linearlayout);
Log.i("System.out ","linear layout = " + view);
Log.i("System.out ","linear layout = " + ly1);
そしてこれを得た -
I/System.out(2603): linear layout = android.widget.LinearLayout@41e09e10
I/System.out(2603): linear layout = android.widget.LinearLayout@41e09e10
この場合、ly1 とビュー オブジェクトが同じアドレスを表すのはなぜですか?