[ERLEDIGT] Instanzierung aus XML

znieh99

znieh99

Fortgeschrittenes Mitglied
12
Hallo Forum,
ich habe mir die Source der App SNAKE (samples/Snake/src/com/example/android/snake/SnakeView.java - platform/development - Git at Google) heruntergeladen um sie zu analysieren. Dabei ist mir eine für mich ungewöhnliche Instanzierung aufgefallen: Schon beim setContentView() in onCreate() wird der Konstruktor der Klasse SnakeView aufgerufen. Ich frage mich nun, ob dies eine übliche Vorgangsweise ist oder eine mir verborgene Sinnhaftigkeit besitzt?
In der Folge kurz der Zusammenhang skizziert:

snake_layout.xml
Code:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.app.heinz.snake.SnakeView            <-- der wohl auslösende Eintrag
        android:id="@+id/snake"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        tileSize="24"
        />

Snake.java
Code:
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // No Title bar
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.snake_layout);               <-- hier wird auch der Konstruktor von SnakeView aufgerufen

        mSnakeView = (SnakeView) findViewById(R.id.snake);
        mSnakeView.setTextView((TextView) findViewById(R.id.text));

SnakeView (TileView ist ein View)
Code:
public class SnakeView extends TileView {
...
  /**
     * Constructs a SnakeView based on inflation from XML
     *
     * @param context
     * @param attrs
     */
    public SnakeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initSnakeView();
 
Hallo Heinz,

wenn du eine Klasse extended View hast und sie in ein separates Java file setzt, dann kannst
du dieses View direkt ins Layout setzen.

class myview extends View .......


und im Layout

<package.myview
android:id="@+id/snake"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tileSize="24"
/>
 
  • Danke
Reaktionen: znieh99
@swa00
Hallo Stefan,
das es so funktioniert ist mir klar. Aber warum mache ich das auf diese Art. Was habe ich davon? Erspare ich mir etwas?
lg heinz
 
Ob das Erspranis ist , liegt im Sinne des Betrachters :)

Wenn du das im Source machst ( also myview MV = new myView() )
und danach ein addView auf deinen Container, ist manchmal lästiger , als
die XML Variante.

Oft ist es aber so , dass man seinem eigenen View noch einen Constructor beifügen möchte (mit ein paar Parametern)
dann ist die Source Variante wieder angebracht.
 
  • Danke
Reaktionen: znieh99
swa00 schrieb:
Ob das Erspranis ist , liegt im Sinne des Betrachters :)
Ok, ich verstehe!
Danke Stefan
lg Heinz
PS: Wie bekomme ich den Betreff eines Themas FETT?
 
PS: Wie bekomme ich den Betreff eines Themas FETT?

Du meinst hier den Themen-Title ?
Das geht leider nicht, denn der wird nur fett, wenn ein User das Thema "ungelesen" hat.
 
  • Danke
Reaktionen: znieh99

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
1.015
Robby1950
R
B
Antworten
6
Aufrufe
1.051
jogimuc
J
Jansenwilson
Antworten
1
Aufrufe
691
Mazuch
Mazuch
Zurück
Oben Unten