findViewByID funktioniert nicht mit eigener Klasse

  • 2 Antworten
  • Letztes Antwortdatum
A

Angelnoir

Neues Mitglied
1
Hallo,

Ich habe folgendes Problem:
Ich starte eine Activity, GameActivity, von einer anderen. Dann lasse ich ein Layout mit einer von SurfaceView abgeleiteten Klasse anzeigen. Funktioniert soweit gut.
Jetzt versuche ich allerdings dieses SurfaceView von GameActivity aus zu finden, das gelingt mir nicht. Eigentlich habe ich so etwas schonmal gemacht, ich finde den Fehler aber nicht.
Minimalbeispiel:

GameActivity
Code:
public class GameActivity extends Activity{
	
	private GameView view;

	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.game_layout);
	        view = (GameView) findViewById(R.id.game_view_1);
	        Button button = (Button) findViewById(R.id.button5)
	        if(view!=null)
	        	//do something
	        else
	        	Log.e("View", "Couldn't find View");
                if(button==null)
	        	Log.e("View", "Couldn't find Button also");
	        
	    }

}

GameView
Code:
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
	
	//Holds the context for drawing process
	private Context m_context;

	public GameView(Context context,AttributeSet attrs) {
		super(context);
		this.m_context=context;
		SurfaceHolder holder = getHolder();
		holder.addCallback(this);
	}
...

game_layout.xml
HTML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    

        <com.angelnoir.levelup.GameView
            
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:id="@+id/game_view_1"/>

        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Button" />

</RelativeLayout>

Manifest:
HTML:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.angelnoir.levelup"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        
        <activity android:name=".MainActivity" android:label="@string/title_activity_main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="GameActivity">
        </activity>
    </application>

</manifest>

Der Button ist nur zu Testzwecken. Die Ausgabe ist dann nur "Couldn't find View".

Habe schon versucht die ID zu ändern, etc. Auch habe ich versucht das View erst später zu finden, wenn ein Touchevent ausgeführt wird.

Es ist das erste Mal, dass ich händisch etwas am Manifest geändert habe, deswegen habe ich die Vermutung, dass der Fehler dort liegt.

Vielen Dank für Eure Mühen!

LG Angelnoir
 
Hast du noch alternative layouts in layout-land oder so herumfliegen (und/oder dort eine andere id benutzt)?
 
Habe den gesamten Ordner durchsuchen lassen, es gibt dort nur zwei layout xml-Dateien
main.xml und game_layout.xml, die main habe ich umbenannt in activity_main.xml nur zur Sicherheit
in der main gibt es kein GameView. Ich habe auch nochmal versucht, der MainActivity das game_layout zuzuweisen und dann nach der View zu suchen, ebenfalls ohne Erfolg.

Ich habe das gesamte Projekt nochmal in klein nachgebildet ebenfalls ohne Erfolg.
Jetzt bin ich wirklich mit meinem Latein am Ende. Ich habe so etwas schonmal gemacht, also eine von SurfaceView abgeleitete Klasse so zu suchen. Da ging es einwandfrei.

Vielleicht findet ja noch jemand etwas, bin für alle Ideen offen :sad:

Edit: Nachdem ich nun so häufig über den geglückten Versuch geschrieben habe, habe ich es einfach mal mit dieser anderen Klasse probiert. Siehe da, es geht. Dann werde ich mal den Unterschied der beiden Klassen suchen ;)

Edit 2: Gefunden, dummer Fehler, passiert mir nie wieder ;) falschen super-Konstruktor aufgerufen im Gameview, Es heißt natürlich super(context, attrs) und nicht nur super(context)

Trotzdem danke an alle, die sich Gedanken gemacht haben!
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: DieGoldeneMitte

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
502
AnnaBauer21
AnnaBauer21
AnnaBauer21
Antworten
6
Aufrufe
1.023
AnnaBauer21
AnnaBauer21
BerndFfm
Antworten
7
Aufrufe
1.244
swa00
swa00
K
Antworten
3
Aufrufe
978
mezzothunder
mezzothunder
Zurück
Oben Unten