Beenden einer Activity von einer View-Klasse aus

  • Antworten:3
  • Bentwortet
Kevin Wrasse
  • Forum-Beiträge: 3

08.12.2010, 13:33:33 via Website

Hallo,

ich übe gerade an einem kleinen Adventure-Game und benutze dafür die Candroid-Game-Engine.

Nun ist es so, dass ich für den ContentView einer Activity eine View-Klasse aufrufe, welche einen Touch-Listener enthält. Ich möchte erstmal durch einen Druck auf den Screen die Activity mitsamt View beende und zur Ursprungs-Activity zurückkehre (was ich momentan nur über den Back-Button erreiche).
Die aufrufende Klasse wird ja mit dem Context übergeben, liegt aber dann im Typ Context vor. Dieser hat keine Methode zum beenden.

Hier etwas Code:

Die Activity:
1package de.serious.skillmaster.game.activities;
2
3import de.serious.skillmaster.game.views.Intro;
4import de.serious.skillmaster.game.views.LapScreen_View;
5import de.serious.skillmaster.game.views.Room1;
6import android.content.Context;
7import android.os.Bundle;
8import at.bartinger.candroid.CandroidActivity;
9
10public class Game_Screen extends CandroidActivity
11{
12 private Context myContext;
13 //private DisplayMetrics dm;
14
15 public static int gamelevel;
16
17 protected void onCreate(Bundle savedInstanceState)
18 {
19 this.myContext = this;
20 setFullscreen(true);
21
22 //dm = new DisplayMetrics();
23 //getWindowManager().getDefaultDisplay().getMetrics(dm);
24 super.onCreate(savedInstanceState);
25
26 switch (gamelevel)
27 {
28 case 1:
29 Intro in = new Intro (myContext);
30 setContentView(in);
31 break;
32
33 case 2:
34 Room1 gv = new Room1 (myContext);
35 setContentView(gv);
36 break;
37
38 case 3:
39 LapScreen_View lsv = new LapScreen_View (myContext);
40 setContentView(lsv);
41 break;
42
43 default :
44 break;
45 }
46
47 }
48
49}


Der View:
1package de.serious.skillmaster.game.views;
2
3import android.content.Context;
4import at.bartinger.candroid.CandroidSurfaceView;
5import at.bartinger.candroid.background.FixedBackground;
6import at.bartinger.candroid.background.MultibleBackground;
7import at.bartinger.candroid.renderer.SurfaceRenderer;
8import at.bartinger.candroid.texture.Texture;
9import at.bartinger.candroid.texture.TextureAtlas;
10import at.bartinger.candroid.texture.TextureManager;
11
12public class Intro extends CandroidSurfaceView
13{
14 private SurfaceRenderer spriteRenderer;
15
16 public static boolean running = true;
17
18 Texture intro;
19
20 FixedBackground intro_fix;
21
22 MultibleBackground room1_MBg;
23
24
25 public Intro(Context context)
26 {
27 super(context);
28
29 spriteRenderer = new SurfaceRenderer();
30
31 intro = new Texture("graphics/explosion_andro_text1.png");
32
33 TextureAtlas atlas = new TextureAtlas();
34 atlas.addTexture(intro);
35 TextureManager.load(context, atlas);
36
37 intro_fix = new FixedBackground(intro);
38 spriteRenderer.setBackground(intro_fix);
39
40 setRendererAndStart(spriteRenderer);
41 }
42
43 @Override
44 public void onTouchDown (int touchX, int touchY, int pressure)
45 {
46//Hier weiß ich nicht weiter.
47 }
48
49 @Override
50 public void recycle()
51 {
52 intro.recycle();
53 }
54}

Danke für die Hilfe,
Kevin

Antworten
Kevin Wrasse
  • Forum-Beiträge: 3

08.12.2010, 15:29:18 via Website

Aha, so geht's.

1@Override
2 public void onTouchDown (int touchX, int touchY, int pressure)
3 {
4 Context co = getContext();
5 Game_Screen gs = (Game_Screen)co;
6 gs.finish();
7 }

Vorher habe ich immer den über den Konstruktor mitgelieferten Context benutzt.


Weiß jemand, warum das falsch war?

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

08.12.2010, 18:21:24 via Website

Game_Screen ist indirekt abgeleitet von Activity. Activity wiederum ist indirekt von Context abgeleitet. Mit den Activities wurde dann erst finish() eingeführt. Durch das "(Game_Screen) context" cast geht das dann.

Was mich, neugierig wie ich bin, interessieren würde: Hast Du mal den Konstruktor-Parameter context in der Klasse (z.B. Intro) gespeichert und diesen dann mittels cast "gefinisht". Müsste doch auch gehen, oder?

Gruß
Harald

Antworten
Kevin Wrasse
  • Forum-Beiträge: 3

16.12.2010, 11:40:35 via Website

So habe ich es zuerst versucht.

Im Deklarationsteil des Views:
1Context co;

Im Konstruktor:
1co = context;

Im Listener:
1GameScreen gs = (GameScreen)co;
2gs.finish();

Hat nicht funktioniert.
An den genauen Error kann ich mich leider nicht erinnern.

Antworten