View von inner zu äußeren Klasse und Objektübergabe

  • Antworten:4
John Do
  • Forum-Beiträge: 36

26.10.2011, 18:19:42 via Website

Hallo liebe Mitglieder!

Ich habe ein lauffähige Activty mit einer inneren Klasse (extends View).

1public class GameFieldActivity extends Activity {
2 LinearLayout linlay;
3 public GameFieldDefaultView gamefielddefaultview;
4
5 @Override
6 public void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 linlay = new LinearLayout(this);
9 gamefielddefaultview = new GameFieldDefaultView(this);
10 linlay.addView(gamefielddefaultview);
11 setContentView(linlay);
12 }
13
14 private class GameDefaultView extends View {
15
16 protected int heightY; // weigth of the layout
17 protected int widthX; // height of the layout
18 public GameDefaultView(Context context) {
19 super(context);
20 }
21 public int setHeightY() {
22 return gamefielddefaultview.getHeight();
23 }
24 public int setWidthX() {
25 return gamefielddefaultview.getWidth();
26 }

Ich habe diese View nun auslagern, da sie später als Vaterklasse dienen soll (Vererbung). Sie enthält noch kein abstract und es kann daher noch ein Objekt von ihr erzegt werden. Das erzeugte Objekt gamefielddefaultview befindet weiterhin in der Activity und steht in der View nicht zur Verfügung. Wie bekomme ich jetzt die Abmessungen des Objektes gamefielddefaultview ? Die Auslagerung der Methoden in die Activity geht nicht, da das Objekt noch nicht auf gebaut ist und Höhe = 0, daher auch die Auslagerung in die innerne Klasse. Eine neue innere Klasse macht wegen der Auslagerung keinen Sinn (meiner Meinung nach). Das Objekt mittels Konstruktor an sich selbst zu übergeben (Naja! ;) ).

— geändert am 26.10.2011, 20:13:39

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

27.10.2011, 08:42:39 via App

Getter Methoden in neue Klasse einbauen.

EDIT: Vergiss es, habe das ...Field... nicht gelesen.

— geändert am 27.10.2011, 08:45:05

Antworten
John Do
  • Forum-Beiträge: 36

27.10.2011, 10:42:11 via Website

Ich habe bemerkt, dass ich meine Frage nicht fehlerfrei angegeben habe. Die erste Version stellt die funktionierende Activity mit der inneren KLasse dar.
erste Version
1public class GameFieldActivity extends Activity {
2 LinearLayout linlay;
3 public GameDefaultView gamedefaultview;
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 linlay = new LinearLayout(this);
8 gamedefaultview = new GameDefaultView(this);
9 linlay.addView(gamedefaultview);
10 setContentView(linlay);
11 }
12
13 private class GameDefaultView extends View { // innere Klasse der Activity
14 public GameDefaultView(Context context) {
15 super(context);
16 levelcontent.setContext(context);
17 }
18 public void prepareGame() {
19 heightY = setHeightY();
20 widthX = setWidthX();
21 stonelength = getStoneLength();
22 levelcontent.setStonelenght(stonelength);
23 background = levelcontent.getBackground(levelnumber, heightY, widthX);
24 loadLevel(levelnumber);
25 loadOriginalGameStones();
26 setStoneObject();
27 countStonetyp();
28 }
29
30 public int setHeightY() {
31 return gamedefaultview.getHeight();
32 }
33
34 public int setWidthX() {
35 return gamedefaultview.getWidth();
36 }

In der zweiten Version habe ich die innere Klasse ausgelagert. Ich erzeuge ein Objekt der neuen Klasse in der Activity. In der View(äu8ere Klasse bzw. neue Klasse) soll nun die Höhe der View ermittelt werden. Das Objekt befindet sich jedoch in der Activity und liegt daher in der View nicht vor. Wie löst man dieses Problem?
zweite Version
1public class GameFieldActivity extends Activity {
2 LinearLayout linlay;
3 public GameDefaultView gamedefaultview;
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 linlay = new LinearLayout(this);
8 gamedefaultview = new GameDefaultView(this);
9 linlay.addView(gamedefaultview);
10 setContentView(linlay);
11 }
12
13 public class GameDefaultView extends View { // Äussere Klasse
14 public GameDefaultView(Context context) {
15 super(context);
16 levelcontent.setContext(context);
17 }
18 public void prepareGame() {
19 heightY = setHeightY();
20 widthX = setWidthX();
21 stonelength = getStoneLength();
22 levelcontent.setStonelenght(stonelength);
23 background = levelcontent.getBackground(levelnumber, heightY, widthX);
24 loadLevel(levelnumber);
25 loadOriginalGameStones();
26 setStoneObject();
27 countStonetyp();
28 }
29
30 public int setHeightY() { // gamedefalutview ist null
31 return gamedefaultview.getHeight();
32 }
33
34 public int setWidthX() {
35 return gamedefaultview.getWidth();
36 }

Antworten
John Do
  • Forum-Beiträge: 36

27.10.2011, 16:59:24 via Website

Ich danke dir. Was für ein Anfängerfehler, aber ich habe es einfach nicht geblickt.

Antworten