Miért öntött terjeszteni Kamerák Kamerák hogy?

szavazat
1

Én meghosszabbította a Kamerák osztály egy osztály nevezett DialButton2 (ne aggódj a nevét az osztály, a nem releváns). Minden DialButton2 osztály jelent az, hogy megmutatja egy tetszőleges képet elhelyezkedik húzható mappában.

package com.com.com;

import android.content.Context;
import android.widget.ImageView;
import android.util.AttributeSet;

public class DialButton2 extends ImageView{

    public DialButton2(Context context) {
        super(context);
        this.setImageResource(R.drawable.dialpad);
    }

    public DialButton2(Context context, AttributeSet attrs){
        super(context, attrs);
        this.setImageResource(R.drawable.dialpad);
    }

}

Az XML fájl a fő tevékenységet az app azt adja meg, hogy a tárgy DialButton2 kell megjeleníteni. Azt, hogy ez a id „button1”.

<?xml version=1.0 encoding=utf-8?>
<TableLayout xmlns:android=http://schemas.android.com/apk/res/android
    android:layout_width=fill_parent
    android:layout_height=fill_parent
    android:stretchColumns=1
    >
   <TableRow
    android:layout_weight=1>
         <DialButton
        android:id=@+id/button1
        android:src=@drawable/dialpad
        android:layout_weight=1
        />

Ne aggódj a többi XML-fájl, a lényegtelen.

A problémám az, hogy amikor megpróbálom példányosítunk utalás a gomb kódját, eclipse azt mondja, azt kell vetni, hogy a Kamerák. Miért ez?

package com.com.com;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;

public class Android3 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.maintable);

        /*
         * The instantiating below gives an error saying I have to cast to ImageView.
         */

        DialButton2 button1 = findViewById(R.id.button1);
    }
}
A kérdést 12/06/2011 14:09
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
1

Be kell vetni, mert getViewById(..)visszatér a Viewtárgyat. Casting van szükség, ha megy a szülő osztály (a View) a gyermek osztály (a ImageView/ DialButton2). Láthatjuk az eljárás részleteit itt .

Válaszolt 12/06/2011 14:16
a forrás felhasználó

szavazat
2

Meg kell átküldeni DialButton2

    DialButton2 button1 = (DialButton2) findViewById(R.id.button1);

findViewById () visszaad egy nézet, meg kell vetni, hogy mielőtt használni, mint egy DialButton2.

Válaszolt 12/06/2011 14:17
a forrás felhasználó

szavazat
1

Időjárás-e vagy sem, hogy egyre DialButton2, vagy sem lényegtelen, mert regalrdless amelynek megtekintéséhez megpróbálja „találja meg” a findViewById (int) , akkor a leadott, hogy ugyanabba az osztályba, hogy inicializálása.

Válaszolt 12/06/2011 15:27
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more