Activities aufrufen

  • Antworten:9
  • Bentwortet
Fraseco
  • Forum-Beiträge: 23

17.07.2013, 22:30:14 via Website

hi progger,

ich hab mich vor kurzem mal sazu entschlossen mit android anzufangen. mache auch gute fortschritte - bis jetzt.
Jetzt bin ich dabei mein erstes richtiges app zu entwickeln. nun hat sich aber ein problemchen heraus kristallisiert.
und zwar habe ich eine haupt-activity (main) und zwei (neuerfang und gallerie) die von dieser via entsprechenden buttons geöffnet werden sollen.
wenn ich auf den button für einen neuen fanga klicke werde ich auch zur richtigen activity geleitet. nur beim klick auf den gallerie-button werde ich immer wieder auf die activity neuerfang geleitet. was mache ich falsch?? bin langsam schon code-blind.

mainactivity:

1package de.androidprojekte.fangtagebuch;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.view.View;
7import android.view.View.OnClickListener;
8import android.widget.Button;
9
10public class FangTagebuchActivity extends Activity implements OnClickListener{
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.main);
16
17 Button button = (Button) findViewById(R.id.buttonNeuerFang);
18 button.setOnClickListener(this);
19
20 Button button1 = (Button) findViewById(R.id.buttonGallerie);
21 button1.setOnClickListener(this);
22 }
23
24
25 @Override
26 public void onClick(View v) {
27
28 startActivity(new Intent(this,NeuerFangActivity.class));
29
30 }
31
32}

neuerfang-activity:

1package de.androidprojekte.fangtagebuch;
2
3import android.app.Activity;
4import android.os.Bundle;
5
6public class NeuerFangActivity extends Activity {
7
8 @Override
9 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.neuerfang);
12 }
13
14}

gallerie-activity:

1package de.androidprojekte.fangtagebuch;
2
3import android.app.Activity;
4import android.os.Bundle;
5
6public class GallerieActivity extends Activity {
7
8 @Override
9 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.gallerie);
12 }
13
14}

Antworten
impjor
  • Forum-Beiträge: 1.793

17.07.2013, 23:08:41 via App

Wo im Code steht denn, dass die Gallery-Activity aufgerufen werden soll?
Tipp: In deiner onClick- Methode muss du prüfen, welcher Button gedrückt wurde:
v.getId() == R.id.xxx

Gruß

— geändert am 17.07.2013, 23:08:54

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Fraseco
  • Forum-Beiträge: 23

17.07.2013, 23:20:34 via Website

impjor
Wo im Code steht denn, dass die Gallery-Activity aufgerufen werden soll?
Tipp: In deiner onClick- Methode muss du prüfen, welcher Button gedrückt wurde:
v.getId() == R.id.xxx

Gruß

sorry wenn ich aufm schlauch stehe. das hier ist noch zeimliches neuland für mich. kannst des mal genauer erklären?? denke schonmal im vorraus

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

17.07.2013, 23:52:05 via Website

Hallo Fraseco,

dein Problem ist, dass du, wie impjor schon geschrieben hat, nicht abfragst welcher Button gedrückt wird und deswegen für jedes Element, welches einen OnClickListener definiert hat, den gleichen Befehl ausführt, der bei dir eben deine NeuerFangActivity aufruft. Jedes Element (View) liefert eine ID zurück, die du definieren kannst und dementsprechend abfragen kannst und so für jedes Element anders reagieren kannst.

1@Override
2 public void onClick(View v) {
3
4switch(View.getId()){
5
6case R.id.button:
7 startActivity(new Intent(this,NeuerFangActivity.class));
8 break;
9
10case R.id.button2:
11 startActivity(new Intent(this,GallerieActivity.class));
12break;
13}
14
15
16}

Grüße

Teste dein IT-Wissen! - IT Quiz

Antworten
Fraseco
  • Forum-Beiträge: 23

18.07.2013, 00:19:20 via Website

Chrisdroid
Hallo Fraseco,

dein Problem ist, dass du, wie impjor schon geschrieben hat, nicht abfragst welcher Button gedrückt wird und deswegen für jedes Element, welches einen OnClickListener definiert hat, den gleichen Befehl ausführt, der bei dir eben deine NeuerFangActivity aufruft. Jedes Element (View) liefert eine ID zurück, die du definieren kannst und dementsprechend abfragen kannst und so für jedes Element anders reagieren kannst.

1@Override
2 public void onClick(View v) {
3
4switch(View.getId()){
5
6case R.id.button:
7 startActivity(new Intent(this,NeuerFangActivity.class));
8 break;
9
10case R.id.button2:
11 startActivity(new Intent(this,GallerieActivity.class));
12break;
13}
14
15
16}

Grüße

hi Chrisdroid,

erstmal danke für deine hilfe (impor danke ich natürlich auch). hab meinen script mal abgeändert.nu zeigt eclipse mir an der fett markierten schript-stelle folgendes an:

"Cannot make a static reference to the non-static method getId() from the Type View".

Was will eclise da von mir. bin zwar des englischen mächtig, aber echt kein plan.

gruß

fraseco

p.s.: irgendwie ist die Ein-Button-Activity einfachen zu proggen :-D

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

18.07.2013, 00:23:55 via Website

Tut mir leid, mein Fehler. Aber da du noch Anfänger bist, gebe ich dir gerne die Chance mich zu korrigieren ;)

Tipp:
1public void onClick(View v) {


Ein Button wird gedrückt und die View wird übergeben.

Grüße

Teste dein IT-Wissen! - IT Quiz

Antworten
Fraseco
  • Forum-Beiträge: 23

18.07.2013, 01:23:57 via Website

danke für eure schnelle hilfe. war jetzt mal ne stunde weg vom rechner und hab mich gerade wieder dran gesetzt. und was soll ich sagen? hab den fehler sofort entdeckt.

gruß

fraseco

p.s.: bis zum nächsten problem ;-D

Antworten
Qpa
  • Forum-Beiträge: 75

18.07.2013, 09:32:11 via Website

Ich nutze den Thread mal für eine allgemeine Frage.

Wo liegen die Vorteil / Nachteile zwischen
1switch(View.getId()){
2
3case R.id.button:
4startActivity(new Intent(this,NeuerFangActivity.class));
5[Hier rufen viele nur eine Methode auf damit das switch Case nicht zu überfüllt wird]
6break;

oder (wie ich es mache)
1public void onClick(View view)
2 {
3
4 if (view.getId()==R.id.btn1calc)
5 {
6 [code bei button press]
7 }
8 if (view.getId()==R.id.xxxxx)
9 {
10 }
Oder wenn man sogar für jedes Widget/OnClickListener eine extra view erzeugt.


Gruß

— geändert am 18.07.2013, 09:32:50

Antworten
impjor
  • Forum-Beiträge: 1.793

18.07.2013, 09:51:00 via App

Deine if-Abfrage ist etwas performance-schwacher, da jeder if-Abzweig geprüft werden muss.
Besser

if () {}
else if () {}
else if () {}
...

Ob switch-case da jetzt noch schneller ist weiß ich nicht. Ist aber auf jeden Fall besser zu lesen.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Qpa

Antworten
Michele
  • Forum-Beiträge: 1.525

18.07.2013, 12:11:53 via Website

Gibt so viele Möglichkeiten für mehrere Buttons.

Etwa du machst aus jedem Button eine Methode.
Oder du nimmst die if() abfrage oder switch.

"Eigentlich" ist alles gleich schnell.

Nur kommt es auf die Übersicht an.

1@Override
2public void onClick(View view) {
3
4 if (view == R.id.xx) {
5
6// Code
7
8} else if (view == R.id.xx) {
9
10// Code
11
12 }
13}

Oder

1@Override
2 public void onClick(View view) {
3
4 switch(view.getId()) {
5
6// case, case und nochmal case
7
8 }
9}

Oder die ganze Methode

1public void ButtonOne() {
2 Button button = (Button) findViewById(R.id.xx);
3 button.setOnClickListener(new View.OnClickListener() {
4 @Override
5 public void onClick(View view) {
6
7 // Code
8
9 }
10 });
11 }

Antworten