Warum funktionieren meine Buttons nicht?

  • Antworten:23
  • Bentwortet
Yannick M
  • Forum-Beiträge: 46

21.01.2013, 19:53:32 via Website

Was muss ich ändern damit es mir das Layout und die Klasse ändert.

Vielen Dank für eure Hilfe.

1import android.os.Bundle;
2import android.app.Activity;
3import android.content.Intent;
4import android.util.Log;
5import android.view.KeyEvent;
6import android.view.Menu;
7import android.view.View;
8import android.view.View.OnClickListener;
9import android.widget.Button;
10import android.widget.Toast;
11
12public class MainActivity extends Activity implements OnClickListener {
13
14
15 private Button mybuttonstarten;
16 private Button mybuttonrekorde;
17 private Button mybuttonoptionen;
18
19
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24
25
26
27
28
29
30
31
32 Button mybuttonstarten = (Button) findViewById(R.id.buttonstarten);
33 mybuttonstarten.setOnClickListener(this);
34 Button mybuttonrekorde = (Button) findViewById(R.id.buttonrekorde);
35 mybuttonrekorde.setOnClickListener(this);
36 Button mybuttonoptionen = (Button) findViewById(R.id.buttonoptionen);
37 mybuttonoptionen.setOnClickListener(this);
38
39
40 }
41
42
43
44 public void onClick(View v) {
45 if(v==mybuttonstarten) {
46
47 setContentView(R.layout.ingame);
48
49 Intent istart = new Intent (MainActivity.this,Ingame.class);
50 startActivity(istart);
51 Log.i("activity_main", "ingame");
52
53 }
54 if(v==mybuttonrekorde) {
55
56 setContentView(R.layout.rekorde);
57
58 Intent irekorde = new Intent (MainActivity.this,Rekorde.class);
59 startActivity(irekorde);
60 Log.i("activity_main", "rekorde");
61
62 }
63
64 if(v==mybuttonoptionen) {
65
66 setContentView(R.layout.optionen);
67
68 Intent ioptionen = new Intent (MainActivity.this,Optionen.class);
69 startActivity(ioptionen);
70 Log.i("activity_main", "optionen");
71
72 }
73
74 }}

Antworten
Christian
  • Forum-Beiträge: 307

21.01.2013, 20:55:54 via Website

Hi,

deine if-Abfrage haut nicht ganz hin.
Kleiner Tipp versuch es mal mit View.getID() -> Doku

Warum rufst du eigentlich setContentView() innerhalb der If-Abfrage auf?

mfg Christian

Antworten
Yannick M
  • Forum-Beiträge: 46

21.01.2013, 21:40:07 via App

Vielen Dank für die rasche Hilfe.

Anstatt View.getID() geht das nicht auch so wie ich es gemacht habe mit findViewbyId(...) ?

Oder ist das nicht das selbe?

Können sie mir sagen wie ich "View.getID()"einbauen muss? (Habe ihren Link gelesen, komme aber nicht so ganz draus.)

Ps: Das mit dem SetContentView habe ich nur gemacht, da es nicht funktioniert hat. Ich habe es schon in der neuen Klasse.

Antworten
Schorn Stein
  • Forum-Beiträge: 20

21.01.2013, 22:43:49 via Website

Versuche es mal so


1public class MainActivity extends Activity implements OnClickListener {
2
3 private Button mybuttonstarten;
4 private Button mybuttonrekorde;
5 private Button mybuttonoptionen;
6
7 @Override
8 public void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.activity_main);
11
12 Button mybuttonstarten = (Button) findViewById(R.id.buttonstarten);
13 mybuttonstarten.setOnClickListener(this);
14 Button mybuttonrekorde = (Button) findViewById(R.id.buttonrekorde);
15 mybuttonrekorde.setOnClickListener(this);
16 Button mybuttonoptionen = (Button) findViewById(R.id.buttonoptionen);
17 mybuttonoptionen.setOnClickListener(this);
18
19 }
20
21
22
23 public void onClick(View v) {
24 switch(v.getId()) {
25
26 case R.id.buttonstarten:
27 //Deine Funktionen...
28 break;
29
30 case R.id.buttonrekorde:
31 //Deine Funktionen...
32 break;
33
34 .......
35
36 }

So ungefähr

Antworten
Yannick M
  • Forum-Beiträge: 46

21.01.2013, 22:56:37 via App

Vielen Dank. Werde es gleich ausprobieren.

Antworten
Yannick M
  • Forum-Beiträge: 46

21.01.2013, 22:57:39 via App

Vielen Dank

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

21.01.2013, 23:30:02 via Website


private Button mybuttonstarten;
...
Button mybuttonstarten = ...

Möchtest du deinen Code vielleicht nochmal überdenken? :bashful:

Antworten
Yannick M
  • Forum-Beiträge: 46

22.01.2013, 18:40:13 via Website

Hab es jetzt mal so gemacht.
Wenn ich nun auf meinem Galaxy ausprobiere und einen Button drücke, hängt das Programm, dann zoomt das Programm an die linke unter Ecke (Finde ich ganz komisch) und zum Schluss kommt die Fehlermeldung: Programm angehalten.
Was mache ich falsch?

1import android.os.Bundle;
2import android.app.Activity;
3import android.content.Intent;
4import android.util.Log;
5import android.view.KeyEvent;
6import android.view.Menu;
7import android.view.View;
8import android.view.View.OnClickListener;
9import android.widget.Button;
10import android.widget.Toast;
11
12public class MainActivity extends Activity implements OnClickListener {
13
14
15 @Override
16 public void onCreate(Bundle savedInstanceState) {
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.activity_main);
19
20 Button mybuttonstarten= (Button) findViewById(R.id.buttonstarten);
21 //Wie vorher
22 Button mybuttonoptionen = (Button) findViewById(R.id.buttonoptionen);
23 mybuttonoptionen.setOnClickListener(this);
24
25 }
26
27
28 public void onClick(View v) {
29 switch(v.getId()) {
30
31 case R.id.buttonstarten:
32
33 Intent istart = new Intent (MainActivity.this,Ingame.class);
34 startActivity(istart);
35 Log.i("activity_main", "ingame");
36 break;
37
38 case R.id.buttonrekorde:
39
40 Intent irekorde = new Intent (MainActivity.this,Rekorde.class);
41 startActivity(irekorde);
42 Log.i("activity_main", "rekorde");
43 break;
44
45 case R.id.buttonoptionen:
46
47 Intent ioptionen = new Intent (MainActivity.this,Optionen.class);
48 startActivity(ioptionen);
49 Log.i("activity_main", "optionen");
50 break;
51
52 }
53
54 }}

So sage ich meinen Buttons:
Was mir aufgefallen ist ich verwende nirgends mehr buttonstartenonclick, da es eine Fehlermeldung ausgibt, wenn ich das statt buttonstarten schreibe.
Muss ich das irgendiwie einbauen?
Wenn ja, wie?
1<Button
2 android:id="@+id/buttonstarten"
3 android:layout_width="250dp"
4 android:layout_height="68dp"
5 android:layout_alignParentRight="true"
6 android:layout_alignParentTop="true"
7 android:layout_marginRight="10dp"
8 android:layout_marginTop="10dp"
9 android:padding="4dp"
10 android:text="@string/start"
11 android:textSize="40sp"
12 android:onClick="buttonstartenclick" />

Vielen Dank für eure Hilfe.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

22.01.2013, 19:05:14 via Website

Wenn du im .xml eine Klick-Methode angibst, dann sollte die in deiner Activity auch existieren, anderenfalls gibts nen Absturz.

Wenn es das nicht war, dann schau doch einfach mal ins log, da steht bis auf die Zeile genau, wo das Problem liegt.

Antworten
Yannick M
  • Forum-Beiträge: 46

22.01.2013, 19:43:07 via Website

Dann reagieren die Buttons nicht mehr.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

22.01.2013, 20:56:18 via Website

Dann reagieren die Buttons nicht mehr.
:grin: iss klar

Ich würde jetzt nach der Ursache forschen, aber wenn du das nicht machen willst, dann nimm das onclick aus dem .xml raus und verwende für den "starten" Knopf das gleiche Muster wie für den anderen (setOnClickListener).

So kann das jedenfalls nicht funktionieren.

Antworten
Schorn Stein
  • Forum-Beiträge: 20

23.01.2013, 14:04:17 via App

Hast du die Activitys im Android Manifest eingetragen?

Antworten
Yannick M
  • Forum-Beiträge: 46

23.01.2013, 17:51:15 via Website

Ja
1<manifest xmlns:android="Webseite, die ich nicht schreiben kann."
2 package="com......"
3 android:versionCode="1"
4 android:versionName="0.4.9" >
5
6 <uses-sdk
7 android:minSdkVersion="8"
8 android:targetSdkVersion="15" />
9
10 <application
11 android:icon="@drawable/ic_launcher"
12 android:label="@string/app_name"
13 android:theme="@style/MyTheme" >
14 <activity
15 android:name=".MainActivity"
16 android:screenOrientation="landscape"
17 android:label="@string/title_activity_main" >
18 <intent-filter>
19 <action android:name="android.intent.action.MAIN" />
20
21 <category android:name="android.intent.category.LAUNCHER" />
22 </intent-filter>
23 </activity>
24 <activity android:name="ingame" ></activity>
25 <activity android:name="optionen" ></activity>
26 <activity android:name="rekorde" ></activity>
27 <activity android:name="activity_main" ></activity>
28 <activity android:name="info" ></activity>
29 </application>
30
31</manifest>

Antworten
Yannick M
  • Forum-Beiträge: 46

23.01.2013, 17:54:33 via Website

Wie soll ich vorgehen bei der Ursachensuche? Mit der Logcat? Wie geht das?

Antworten
Yannick M
  • Forum-Beiträge: 46

23.01.2013, 18:49:58 via Website

Geht immer noch nicht. Habe es zuerst klein geschrieben mit Punkt und jetzt noch Gross.

1<activity android:name=".Ingame" ></activity>
2 <activity android:name=".Optionen" ></activity>
3 <activity android:name=".Rekorde" ></activity>
4 <activity android:name=".Info" ></activity>

— geändert am 23.01.2013, 18:50:11

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

23.01.2013, 19:24:52 via Website

Wie soll ich vorgehen bei der Ursachensuche? Mit der Logcat? Wie geht das?

Wie meinst du das jetzt?
Logcat-View öffnen, Handy mit PC verbinden, App starten, Knopf drücken und dann im zuvor (oder auch jetzt erst) geöffneten View einfach lesen was da steht.

Antworten
Yannick M
  • Forum-Beiträge: 46

23.01.2013, 20:53:20 via Website

log file:

01-23 19:47:27.854: I/ActivityManager(897): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.yannick.crazy.dolph/.MainActivity} from pid 1001
01-23 19:47:27.863: W/WindowManager(897): Failure taking screenshot for (180x300) to layer 21005
01-23 19:47:27.923: D/dalvikvm(1354): Not late-enabling CheckJNI (already on)
01-23 19:47:27.954: I/ActivityManager(897): Start proc com.yannick.crazy.dolph for activity com.yannick.crazy.dolph/.MainActivity: pid=1354 uid=10039 gids={}
01-23 19:47:28.063: W/SurfaceFlinger(778): createScreenshotSurface failed (Function not implemented)
01-23 19:47:28.074: I/ActivityManager(897): Config changed: {1.0 310mcc260mnc en_US layoutdir=0 sw320dp w533dp h294dp nrml long land finger -keyb/v/h tball/v s.7}
01-23 19:47:28.234: I/InputReader(897): Reconfiguring input devices. changes=0x00000004
01-23 19:47:28.234: I/InputReader(897): Device reconfigured: id=0, name='qwerty2', surface size is now 480x800, mode is 1
01-23 19:47:28.494: W/NetworkManagementSocketTagger(897): setKernelCountSet(10039, 1) failed with errno -2
01-23 19:47:28.584: I/Process(897): Sending signal. PID: 1354 SIG: 3
01-23 19:47:28.584: I/dalvikvm(1354): threadid=3: reacting to signal 3
01-23 19:47:28.604: I/dalvikvm(1354): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:28.754: D/dalvikvm(1354): GC_FOR_ALLOC freed 56K, 3% free 9016K/9283K, paused 52ms
01-23 19:47:28.845: I/dalvikvm-heap(1354): Grow heap (frag case) to 12.375MB for 3686412-byte allocation
01-23 19:47:28.904: D/dalvikvm(1354): GC_CONCURRENT freed <1K, 3% free 12616K/12935K, paused 3ms+2ms
01-23 19:47:29.085: I/Process(897): Sending signal. PID: 1354 SIG: 3
01-23 19:47:29.085: I/dalvikvm(1354): threadid=3: reacting to signal 3
01-23 19:47:29.104: I/dalvikvm(1354): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:29.224: D/dalvikvm(1354): GC_FOR_ALLOC freed 0K, 3% free 12616K/12935K, paused 24ms
01-23 19:47:29.294: I/dalvikvm-heap(1354): Grow heap (frag case) to 20.284MB for 8294412-byte allocation
01-23 19:47:29.354: D/dalvikvm(1354): GC_CONCURRENT freed 0K, 2% free 20716K/21063K, paused 8ms+3ms
01-23 19:47:29.594: I/Process(897): Sending signal. PID: 1354 SIG: 3
01-23 19:47:29.594: I/dalvikvm(1354): threadid=3: reacting to signal 3
01-23 19:47:29.604: I/dalvikvm(1354): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:30.094: I/Process(897): Sending signal. PID: 1354 SIG: 3
01-23 19:47:30.094: I/dalvikvm(1354): threadid=3: reacting to signal 3
01-23 19:47:30.104: I/dalvikvm(1354): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:30.344: W/InputManagerService(897): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@b4bcd630 (uid=10012 pid=1001)
01-23 19:47:30.344: W/IInputConnectionWrapper(1001): showStatusIcon on inactive InputConnection
01-23 19:47:30.364: D/gralloc_goldfish(1354): Emulator without GPU emulation detected.
01-23 19:47:30.554: I/ActivityManager(897): Displayed com.yannick.crazy.dolph/.MainActivity: +2s656ms
01-23 19:47:30.754: W/NetworkManagementSocketTagger(897): setKernelCountSet(10012, 0) failed with errno -2
01-23 19:47:32.914: D/dalvikvm(897): GC_EXPLICIT freed 188K, 15% free 11068K/12935K, paused 3ms+48ms
01-23 19:47:33.914: I/ActivityManager(897): START {cmp=com.yannick.crazy.dolph/.Ingame} from pid 1354
01-23 19:47:33.914: D/AndroidRuntime(1354): Shutting down VM
01-23 19:47:33.914: W/dalvikvm(1354): threadid=1: thread exiting with uncaught exception (group=0xb4039180)
01-23 19:47:33.924: E/AndroidRuntime(1354): FATAL EXCEPTION: main
01-23 19:47:33.924: E/AndroidRuntime(1354): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.yannick.crazy.dolph/com.yannick.crazy.dolph.Ingame}; have you declared this activity in your AndroidManifest.xml?
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1508)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.app.Activity.startActivityForResult(Activity.java:3190)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.app.Activity.startActivity(Activity.java:3297)
01-23 19:47:33.924: E/AndroidRuntime(1354): at com.yannick.crazy.dolph.MainActivity.onClick(MainActivity.java:42)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.view.View.performClick(View.java:3511)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.view.View$PerformClick.run(View.java:14105)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.os.Handler.handleCallback(Handler.java:605)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.os.Looper.loop(Looper.java:137)
01-23 19:47:33.924: E/AndroidRuntime(1354): at android.app.ActivityThread.main(ActivityThread.java:4424)
01-23 19:47:33.924: E/AndroidRuntime(1354): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 19:47:33.924: E/AndroidRuntime(1354): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 19:47:33.924: E/AndroidRuntime(1354): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-23 19:47:33.924: E/AndroidRuntime(1354): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-23 19:47:33.924: E/AndroidRuntime(1354): at dalvik.system.NativeStart.main(Native Method)
01-23 19:47:33.964: W/ActivityManager(897): Force finishing activity com.yannick.crazy.dolph/.MainActivity
01-23 19:47:33.974: W/WindowManager(897): Failure taking screenshot for (180x300) to layer 21010
01-23 19:47:34.094: W/SurfaceFlinger(778): createScreenshotSurface failed (Function not implemented)
01-23 19:47:34.115: I/InputReader(897): Reconfiguring input devices. changes=0x00000004
01-23 19:47:34.115: I/InputReader(897): Device reconfigured: id=0, name='qwerty2', surface size is now 480x800, mode is 1
01-23 19:47:34.194: I/ActivityManager(897): Config changed: {1.0 310mcc260mnc en_US layoutdir=0 sw320dp w320dp h508dp nrml long port finger -keyb/v/h tball/v s.8}
01-23 19:47:34.494: W/ActivityManager(897): Activity pause timeout for ActivityRecord{b4ab9ca0 com.yannick.crazy.dolph/.MainActivity}
01-23 19:47:34.494: I/Process(897): Sending signal. PID: 1354 SIG: 3
01-23 19:47:34.494: I/dalvikvm(1354): threadid=3: reacting to signal 3
01-23 19:47:34.524: I/dalvikvm(1354): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:34.595: W/NetworkManagementSocketTagger(897): setKernelCountSet(10012, 1) failed with errno -2
01-23 19:47:35.144: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:35.144: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:35.174: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:35.644: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:35.644: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:35.676: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:36.144: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:36.144: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:36.154: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:36.644: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:36.644: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:36.714: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:37.144: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:37.144: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:37.244: D/dalvikvm(1001): GC_FOR_ALLOC freed 2770K, 19% free 17902K/21959K, paused 75ms
01-23 19:47:37.456: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:37.644: I/Process(897): Sending signal. PID: 1001 SIG: 3
01-23 19:47:37.644: I/dalvikvm(1001): threadid=3: reacting to signal 3
01-23 19:47:37.724: I/dalvikvm(1001): Wrote stack traces to '/data/anr/traces.txt'
01-23 19:47:37.855: D/dalvikvm(1001): GC_FOR_ALLOC freed 978K, 16% free 18635K/21959K, paused 91ms
01-23 19:47:37.944: D/dalvikvm(1001): GC_FOR_ALLOC freed 186K, 12% free 19353K/21959K, paused 30ms
01-23 19:47:37.994: I/dalvikvm-heap(1001): Grow heap (frag case) to 20.176MB for 1286220-byte allocation
01-23 19:47:38.027: W/NetworkManagementSocketTagger(897): setKernelCountSet(10039, 0) failed with errno -2
01-23 19:47:38.144: D/dalvikvm(1001): GC_FOR_ALLOC freed <1K, 12% free 20609K/23239K, paused 108ms
01-23 19:47:39.174: D/dalvikvm(897): GC_EXPLICIT freed 147K, 15% free 11111K/12935K, paused 6ms+29ms
01-23 19:47:39.514: I/Process(1354): Sending signal. PID: 1354 SIG: 9
01-23 19:47:39.544: I/ActivityManager(897): Process com.yannick.crazy.dolph (pid 1354) has died.
01-23 19:47:39.544: I/WindowManager(897): WIN DEATH: Window{b4c238e8 com.yannick.crazy.dolph/com.yannick.crazy.dolph.MainActivity paused=false}
01-23 19:47:39.694: W/InputManagerService(897): Got RemoteException sending setActive(false) notification to pid 1354 uid 10039

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

23.01.2013, 22:47:58 via Website

Nachdem du das bestimmt auch gelesen und nicht nur hier her kopiert hast, weißt du dann ja jetzt, was die Ursache des Absturzes war, oder?

Antworten
Yannick M
  • Forum-Beiträge: 46

24.01.2013, 12:54:49 via Website

Ich habe es gelesen.

101-23 19:47:33.924: E/AndroidRuntime(1354): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.yannick.crazy.dolph/com.yannick.crazy.dolph.Ingame}; have you declared this activity in your AndroidManifest.xml?

Und ich glaube, das ist der Fehler oder?
Aber, ich habe es doch in der Manifest Datei angegeben.

Antworten
Yannick M
  • Forum-Beiträge: 46

24.01.2013, 13:55:36 via Website

Habe ich! Weiss nicht auf was du hinauswillst. es geht nicht.

Antworten