Activity in TabActivity

  • Antworten:20
Marc
  • Forum-Beiträge: 44

19.01.2011, 12:03:17 via Website

Hallo Gemeinde ich hab ein problem und zwar hab ich mir eine Tabactivity erstellt mit 3 Tabs und in dem ersten Tab hab ich eine Activity erstellt mit verschiedenen Buttons die wiederum auf andere Activitys verweisen. und nun wenn ich auf einen der Buttons drücke öffnet sich die Activity allerdings verschwindet dann die Tableiste. Ich hab mal etwas recherschiert und auch ein weg gefunden wie die Tableiste immer da bleibt nur hab ich dann das problem wenn ich den BackButton betätige das das komplette Programm sich beendet was auch klar ist da ich die alte View durch die neue ersetze. das mit Back funzt nicht da ich ein problem im Code habe:
1public class Hauptseite extends ActivityGroup
2 implements OnClickListener {
3
4 public static Hauptseite group;
5 private ArrayList<View> history;
6
7 public ImageButton systemhaus;
8 private ImageButton it_service;
9 private ImageButton it_consulting;
10 private ImageButton software;
11 private ImageButton web;
12 private ImageButton referenzen;
13 private ImageButton system;
14 private ImageButton netzwerk;
15 private ImageButton telefon;
16
17 @Override
18 protected void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.hauptseite);
21 this.history = new ArrayList<View>();
22 group = this;
23
24
25 systemhaus = (ImageButton) findViewById(R.id.systemhaus);
26 systemhaus.setOnClickListener(new View.OnClickListener() {
27
28 public void onClick(View v) {
29 View view = getLocalActivityManager().startActivity("Systemhaus", new
30 Intent(v.getContext(),Systemhaus.class)
31 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
32 .getDecorView();
33 replaceView(view);
34
35 }
36
37 public void replaceView(View v) {
38 history.add(v);
39 setContentView(v);
40
41 }
42 public void back() {
43 if(history.size() > 0) {
44 history.remove(history.size()-1);
45 setContentView(history.get(history.size()-1));
46 }else {
47 finish();
48 }
49
50 }
51
52
53 public void onBackPressed() {
54 Hauptseite.group.back();
55 return;
56 }
57
58 });

der sagt mir im Editor das die Methode Back() im Type Hauptseite nicht definiert ist aber das habe ich ja darüber getan ich weiss nicht weiter währe für jede Hilfe dankbar

lg Marc

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 13:08:39 via Website

Mir fällt da direkt eine Frage zu dem Code ein:

Du deklarierst eine static Variable, die bei jedem onCreate auf this gesetzt wird.
D.h. sie zeigt immer auf die zuletzt angelegte Instanz, also eigentlich immer auf die aktuelle.
D.h. du könntest statt Hauptseite.group.back(); auch einfach back() aufrufen.

Static Variablen sollte man nur extrem vorsichtig einsetzen und auch nur wenn es WIRKLICH nicht anders geht, oder Sinn macht (z.B. ein Logger für eine Class).
Und ganz generell sollte man niemals veränderliche Variablen public deklarieren, sondern höchstens als final gekennzeichnete Konstanten.
Das kann sonst ganz schnell zu bösen Seiteneffekten führen, wenn sich die Daten mehrerer Instanzen überlappen und man sucht sich stundenlang einen Wolf.

2. Wäre der exakte Wortlaut der Fehlermeldung interessant für eine Hilfestellung.

Gruß,
Rafael

— geändert am 19.01.2011, 13:17:28

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 13:17:47 via Website

Hi,

ich hab es mal so gemacht wie du meinst mit nur back() aufrufen dann sagt er mir "The method onBackPressed() from the type new View.OnClickListener(){} is never used locally"

und zu 2. die meldung ist
The method back() is undefined for the type Hauptseite

ich möchte einfach nur das wenn ich auf ein Button drücke und dann auf der nächsten seite bin wieder per backbutton 1 schritt zurück komme

gruß Marc

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 13:28:43 via Website

Marc
Hi,

ich hab es mal so gemacht wie du meinst mit nur back() aufrufen dann sagt er mir "The method onBackPressed() from the type new View.OnClickListener(){} is never used locally"

OK, jetzt hab ich mir das nochmal angesehen.

Du hast eine schliessende Klammer bei deiner anonymen inneren Klasse vergessen.

Somit zählt er die Methoden noch zum OnclickListener, statt zu deiner Activity.

In den OnclickListener gehört nur die Methode onClick() !
Danach musst du die Klasse mit einem } schliessen (in Zeile 36).

Wäre der Code vernünftig eingerückt, würde man das auch direkt sehen :)
Drück mal in Eclipse (Wenn du damit arbeitest) Strg+Shift+F um den Code gscheit zu layouten.

Gruß,
Rafael

— geändert am 19.01.2011, 13:35:20

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 13:56:43 via Website

bei mir ist der Code eingerückt in Eclipse aber beim kopieren hierrein geht die Formatierung verloren

wenn ich das so mache wie du meinst bekomme ich nochmehr fehlermeldungen:
bei public void back():

Multiple markers at this line
- back cannot be resolved to a type
- Syntax error, insert "EnumBody" to complete BlockStatement
- Syntax error, insert "enum Identifier" to complete
EnumHeaderName
- Syntax error on token "void", @ expected

und bei public void onBackPressed()
Multiple markers at this line
- Syntax error on token "void", @
expected
- Syntax error on token(s), misplaced
construct(s)

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:00:54 via Website

1public class Hauptseite extends ActivityGroup implements OnClickListener {
2
3 public static Hauptseite group;
4 private ArrayList<View> history;
5
6 private ImageButton systemhaus;
7 private ImageButton it_service;
8 private ImageButton it_consulting;
9 private ImageButton software;
10 private ImageButton web;
11 private ImageButton referenzen;
12 private ImageButton system;
13 private ImageButton netzwerk;
14 private ImageButton telefon;
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.hauptseite);
20 this.history = new ArrayList<View>();
21 group = this;
22
23 systemhaus = (ImageButton) findViewById(R.id.systemhaus);
24 systemhaus.setOnClickListener(new View.OnClickListener() {
25
26 public void onClick(View v) {
27 View view = getLocalActivityManager().startActivity(
28 "Systemhaus",
29 new Intent(v.getContext(), Systemhaus.class)
30 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
31 .getDecorView();
32 replaceView(view);
33
34 }
35
36 public void replaceView(View v) {
37 history.add(v);
38 setContentView(v);
39
40 }
41 });
42 public void back() {
43 if (history.size() > 0) {
44 history.remove(history.size() - 1);
45 setContentView(history.get(history.size() - 1));
46 } else {
47 finish();
48 }
49
50 }
51
52 public void onBackPressed() {
53 Hauptseite.group.back();
54 return;
55 }
56
57
58
59 it_service = (ImageButton) findViewById(R.id.it_service);
60 it_service.setOnClickListener(new View.OnClickListener() {
61
62 public void onClick(View v) {
63 Intent myIntent = new Intent(v.getContext(), It_service.class);
64 startActivityForResult(myIntent, 0);
65 }
66
67 });

thx

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 14:06:06 via Website

Bachte Zeile 31 und 32 !
31 ist die schliessende Klammer der Methode, 32 die der anonymen inneren Klasse !

In 58 und 59 machst Du genau das gleiche, dort war es aber richtig.

1public class Hauptseite extends ActivityGroup implements OnClickListener {
2
3 public static Hauptseite group;
4 private ArrayList<View> history;
5 private ImageButton systemhaus;
6 private ImageButton it_service;
7 private ImageButton it_consulting;
8 private ImageButton software;
9 private ImageButton web;
10 private ImageButton referenzen;
11 private ImageButton system;
12 private ImageButton netzwerk;
13 private ImageButton telefon;
14
15 @Override
16 protected void onCreate(Bundle savedInstanceState) {
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.hauptseite);
19 this.history = new ArrayList<View>();
20 group = this;
21
22 systemhaus = (ImageButton) findViewById(R.id.systemhaus);
23 systemhaus.setOnClickListener(new View.OnClickListener() {
24 public void onClick(View v) {
25 View view = getLocalActivityManager().startActivity(
26 "Systemhaus",
27 new Intent(v.getContext(), Systemhaus.class)
28 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
29 .getDecorView();
30 replaceView(view);
31 }
32 });
33
34 public void replaceView(View v) {
35 history.add(v);
36 setContentView(v);
37 }
38
39 public void back() {
40 if (history.size() > 0) {
41 history.remove(history.size() - 1);
42 setContentView(history.get(history.size() - 1));
43 } else {
44 finish();
45 }
46 }
47
48 public void onBackPressed() {
49 Hauptseite.group.back();
50 }
51
52 it_service = (ImageButton) findViewById(R.id.it_service);
53 it_service.setOnClickListener(new View.OnClickListener() {
54
55 public void onClick(View v) {
56 Intent myIntent = new Intent(v.getContext(), It_service.class);
57 startActivityForResult(myIntent, 0);
58 }
59 });

— geändert am 19.01.2011, 14:07:13

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:12:32 via Website

du hast aber die Schliessende Runde Klammer in zeile 32 vergessen die schliesst die offene in zeile 23
und wenn man die schliesst kommt es zu den fehlern die ich dir ebend geschrieben hab

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:14:33 via Website

ups ne hast du doch nicht war im post verrutscht:grin:

aber wie gesagt auf die weise bekomme ich die fehlermeldungen

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 14:15:39 via Website

Marc
du hast aber die Schliessende Runde Klammer in zeile 32 vergessen die schliesst die offene in zeile 23
und wenn man die schliesst kommt es zu den fehlern die ich dir ebend geschrieben hab

Die muss da sein !
Du schliesst damit die Parameterliste der Methode setOnClickListener().

Der Fehler muss nun woanders liegen. Schau dir nochmal ganz genau die Klammerung der gesamten Klasse an, denn das scheint ja nicht der gesamte Code zu sein, sonst würde ganz unten noch die schliessende } der Klasse fehlen.

Ab Zeile 52 steht alles direkt im Body der Klasse und außerhalb jeglicher Methode.
Das ist syntaktisch nicht korrekt.

— geändert am 19.01.2011, 14:16:47

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:16:14 via Website

und noch The method replaceView(View) is undefined for the type new View.OnClickListener(){}

der kommt dann nicht mehr an die Methode ran die dort drunter ist

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:19:24 via Website

na gut ich werd mal schauen aber eigentlich sollten alle klammern richtig sein der rest des codes ist eigentlich nur noch 7 weitere Butons wie der 2. und dann noch die schliessende Klammer der klasse.

der funtioniert auch solange ich die Back() methode rauslasse

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 14:21:19 via Website

Guck dir mal Zeile 52 ff. an.
Das sind Befehle, die in einer Methode stehen müssen. Die stehen aber direkt in der Klasse. Das kompiliert nicht.
Direkt in der Klasse dürfen nur Variablendeklarationen stehen.

Erst wenn die Syntax Fehler raus sind, kannst Du dich an die Fehler mit Sichtbarkeit von Methoden machen,
denn solange die Syntax nicht stimmt, kann der Compiler das eh nicht 100% auflösen.
Also erst die Klasse in ein gültiges Format bringen, dann nochmal gucken.

— geändert am 19.01.2011, 14:23:01

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:26:05 via Website

ne alle Buttons sind in der onCreate Methode hab grad nochmal geschaut

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 14:37:16 via Website

1import java.util.ArrayList;
2import android.app.ActivityGroup;
3import android.os.Bundle;
4import android.view.View;
5import android.content.Intent;
6import android.view.View.OnClickListener;
7import android.widget.ImageButton;
8
9public class Hauptseite extends ActivityGroup implements OnClickListener {
10
11 public static Hauptseite group;
12 private ArrayList<View> history;
13 private ImageButton systemhaus;
14 private ImageButton it_service;
15 private ImageButton it_consulting;
16 private ImageButton software;
17 private ImageButton web;
18 private ImageButton referenzen;
19 private ImageButton system;
20 private ImageButton netzwerk;
21 private ImageButton telefon;
22
23 @Override
24 protected void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 setContentView(R.layout.hauptseite);
27 this.history = new ArrayList<View>();
28 group = this;
29
30 systemhaus = (ImageButton) findViewById(R.id.systemhaus);
31
32 systemhaus.setOnClickListener(new View.OnClickListener() {
33 public void onClick(View v) {
34 View view = getLocalActivityManager().startActivity(
35 "Systemhaus",
36 new Intent(v.getContext(), Systemhaus.class)
37 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
38 .getDecorView();
39 replaceView(view);
40 }
41
42
43 public void replaceView(View v) {
44 history.add(v);
45 setContentView(v);
46 }
47 });
48
49 public void back() {
50 if (history.size() > 0) {
51 history.remove(history.size() - 1);
52 setContentView(history.get(history.size() - 1));
53 } else {
54 finish();
55 }
56 }
57
58 public void onBackPressed() {
59 back();
60 }
61
62
63 it_service = (ImageButton) findViewById(R.id.it_service);
64 it_service.setOnClickListener(new View.OnClickListener() {
65
66 public void onClick(View v) {
67 Intent myIntent = new Intent(v.getContext(), It_service.class);
68 startActivityForResult(myIntent, 0);
69 }
70 });
71 it_consulting = (ImageButton) findViewById(R.id.it_consulting);
72 it_consulting.setOnClickListener(new View.OnClickListener() {
73
74 public void onClick(View v) {
75 Intent myIntent = new Intent(v.getContext(),
76 It_consulting.class);
77 startActivityForResult(myIntent, 0);
78 }
79
80 });
81 software = (ImageButton) findViewById(R.id.software);
82 software.setOnClickListener(new View.OnClickListener() {
83
84 public void onClick(View v) {
85 Intent myIntent = new Intent(v.getContext(), Software.class);
86 startActivityForResult(myIntent, 0);
87 }
88
89 });
90 web = (ImageButton) findViewById(R.id.web);
91 web.setOnClickListener(new View.OnClickListener() {
92
93 public void onClick(View v) {
94 Intent myIntent = new Intent(v.getContext(), Web.class);
95 startActivityForResult(myIntent, 0);
96 }
97
98 });
99 referenzen = (ImageButton) findViewById(R.id.referenzen);
100 referenzen.setOnClickListener(new View.OnClickListener() {
101
102 public void onClick(View v) {
103 Intent myIntent = new Intent(v.getContext(), referenzen.class);
104 startActivityForResult(myIntent, 0);
105 }
106
107 });
108 system = (ImageButton) findViewById(R.id.system);
109 system.setOnClickListener(new View.OnClickListener() {
110
111 public void onClick(View v) {
112 Intent myIntent = new Intent(v.getContext(), System.class);
113 startActivityForResult(myIntent, 0);
114 }
115
116 });
117 netzwerk = (ImageButton) findViewById(R.id.netzwerk);
118 netzwerk.setOnClickListener(new View.OnClickListener() {
119
120 public void onClick(View v) {
121 Intent myIntent = new Intent(v.getContext(), Netzwerk.class);
122 startActivityForResult(myIntent, 0);
123 }
124
125 });
126 telefon = (ImageButton) findViewById(R.id.telefon);
127 telefon.setOnClickListener(new View.OnClickListener() {
128
129 public void onClick(View v) {
130 Intent myIntent = new Intent(v.getContext(), Telefon.class);
131 startActivityForResult(myIntent, 0);
132 }
133
134 });
135 }
136
137 public void onClick(View v) {
138 // TODO Auto-generated method stub
139
140 }
141
142}

danke für deine Geduld

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

19.01.2011, 14:46:57 via Website

Bitte achte auf die Klammerung deiner anonymen inneren Klassen !
Denn du hattest das ganze so geklammert, dass alles NICHT in der onCreate Methode stand, sondern im OnClickListener.

Wenn Du damit unsicher bist, lagere die OnClickListener in INNERE Klassen aus,
denn ANONYME inner-classes sind eigentlich eh als Notbehelf verpönt.



1import java.util.ArrayList;
2import android.app.ActivityGroup;
3import android.os.Bundle;
4import android.view.View;
5import android.content.Intent;
6import android.view.View.OnClickListener;
7import android.widget.ImageButton;
8
9public class Hauptseite extends ActivityGroup implements OnClickListener {
10
11 public static Hauptseite group;
12 private ArrayList<View> history;
13 private ImageButton systemhaus;
14 private ImageButton it_service;
15 private ImageButton it_consulting;
16 private ImageButton software;
17 private ImageButton web;
18 private ImageButton referenzen;
19 private ImageButton system;
20 private ImageButton netzwerk;
21 private ImageButton telefon;
22
23 @Override
24 protected void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 setContentView(R.layout.hauptseite);
27 this.history = new ArrayList<View>();
28 group = this;
29
30 systemhaus = (ImageButton) findViewById(R.id.systemhaus);
31
32 systemhaus.setOnClickListener(new View.OnClickListener() {
33 public void onClick(View v) {
34 View view = getLocalActivityManager().startActivity(
35 "Systemhaus",
36 new Intent(v.getContext(), Systemhaus.class)
37 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
38 .getDecorView();
39 replaceView(view);
40 }
41 });
42
43 it_service = (ImageButton) findViewById(R.id.it_service);
44 it_service.setOnClickListener(new View.OnClickListener() {
45
46 public void onClick(View v) {
47 Intent myIntent = new Intent(v.getContext(), It_service.class);
48 startActivityForResult(myIntent, 0);
49 }
50 });
51
52 it_consulting = (ImageButton) findViewById(R.id.it_consulting);
53 it_consulting.setOnClickListener(new View.OnClickListener() {
54
55 public void onClick(View v) {
56 Intent myIntent = new Intent(v.getContext(),
57 It_consulting.class);
58 startActivityForResult(myIntent, 0);
59 }
60
61 });
62 software = (ImageButton) findViewById(R.id.software);
63 software.setOnClickListener(new View.OnClickListener() {
64
65 public void onClick(View v) {
66 Intent myIntent = new Intent(v.getContext(), Software.class);
67 startActivityForResult(myIntent, 0);
68 }
69
70 });
71 web = (ImageButton) findViewById(R.id.web);
72 web.setOnClickListener(new View.OnClickListener() {
73
74 public void onClick(View v) {
75 Intent myIntent = new Intent(v.getContext(), Web.class);
76 startActivityForResult(myIntent, 0);
77 }
78
79 });
80 referenzen = (ImageButton) findViewById(R.id.referenzen);
81 referenzen.setOnClickListener(new View.OnClickListener() {
82
83 public void onClick(View v) {
84 Intent myIntent = new Intent(v.getContext(), referenzen.class);
85 startActivityForResult(myIntent, 0);
86 }
87
88 });
89 system = (ImageButton) findViewById(R.id.system);
90 system.setOnClickListener(new View.OnClickListener() {
91
92 public void onClick(View v) {
93 Intent myIntent = new Intent(v.getContext(), System.class);
94 startActivityForResult(myIntent, 0);
95 }
96
97 });
98 netzwerk = (ImageButton) findViewById(R.id.netzwerk);
99 netzwerk.setOnClickListener(new View.OnClickListener() {
100
101 public void onClick(View v) {
102 Intent myIntent = new Intent(v.getContext(), Netzwerk.class);
103 startActivityForResult(myIntent, 0);
104 }
105
106 });
107 telefon = (ImageButton) findViewById(R.id.telefon);
108 telefon.setOnClickListener(new View.OnClickListener() {
109
110 public void onClick(View v) {
111 Intent myIntent = new Intent(v.getContext(), Telefon.class);
112 startActivityForResult(myIntent, 0);
113 }
114
115 });
116 }
117
118 public void replaceView(View v) {
119 history.add(v);
120 setContentView(v);
121 }
122
123 public void back() {
124 if (history.size() > 0) {
125 history.remove(history.size() - 1);
126 setContentView(history.get(history.size() - 1));
127 } else {
128 finish();
129 }
130 }
131
132 public void onBackPressed() {
133 back();
134 }
135
136 public void onClick(View v) {
137 // TODO Auto-generated method stub
138
139 }
140
141}

— geändert am 19.01.2011, 14:47:27

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 15:02:38 via Website

vielen dank jetzt funzt es :grin:

Antworten
Marc
  • Forum-Beiträge: 44

19.01.2011, 15:05:29 via Website

ich hab noch viel zu lernen bin noch recht neu im Programmier bereich:grin::grin:

Antworten