onClickListener mit mehreren Buttons ist nicht möglich

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

10.06.2017, 11:25:49 via Website

Hallo Leute,

ich bin ein ziemlicher Anfänger in der Android Programmierung und habe Probleme mit dem onClickListener. Ich habe viele Buttons in meiner App und habe mir überlegt wie ich es am besten mache. Ich habe es also folgendermaßen getan:

    btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(this);
    btn2 = (Button) findViewById(R.id.button2);
    btn2.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if(v == btn1) {
        setContentView(R.layout.layout_1);
    } else if(v == btn2) {
        setContentView(R.layout.activity_main);
    }
}

Sobald bei dieser Abfrage zwei oder mehr Buttons sind stürtzt die App beim Start ab. Bei einem Button funtkioniert sie aber. Wie kann ich dieses Problem beheben?

Mit freundlichen Grüßen

Lukas

— geändert am 10.06.2017, 11:27:28 durch Moderator

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 11:27:27 via App

Hallo Lukas!
Herzlich Willkommen hier bei uns im Forum. :)
Ich habe deinen Threadtitel mal angepasst.
Bitte achte beim nächsten Thread auf einen aussagekräftigeren Titel.
Danke :)



Wie sieht denn die Fehlermeldung im LogCat aus wenn du mehrere Buttons im onClick behandelst?

— geändert am 10.06.2017, 11:28:08

LG Pascal //It's not a bug, it's a feature. :) ;)

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

10.06.2017, 13:00:47 via Website

Okay, mache ich das nächste Mal.

Wo genau finde ich den LogCat? (angel) (Bin absoluter Anfänger).

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

10.06.2017, 13:04:46 via Website

Google hat meine Frage schon beantowrtet. (laughing)

Hier die Fehlermeldung aus dem LogCat:

FATAL EXCEPTION: main
Process: de.underlp.gutscheintuete, PID: 2013
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.underlp.gutscheintuete/de.underlp.gutscheintuete.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at de.underlp.gutscheintuete.MainActivity.onCreate(MainActivity.java:34)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5017) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method) 

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 13:29:43 via Website

Das funktioniert aber nur sauber wenn du den Button mit der Main Aktivität benutzt ,benutzt du die Activity die auf das Label_1 zeigt sollte es auch knallen .

Stichwort hier dürften Intents und wie wechsele ich eine Activity sein .

Das ist nicht schwer ,mach dir keine Sorgen habe beim ersten mal auch davor gesessen und es net so wirklich kapiert.

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

10.06.2017, 13:41:43 via Website

Danke! Also was genau muss ich jetzt ändern? (angel)

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 13:47:18 via Website

Das musst du alleine herrausfinden ,da das Grundlagen sind ,ich habe Dir die Richtung gegeben . Wenn dir einer alles vorbetet lernst du es nicht, gib einfach Activity wechseln ein , es gibt bei Youtube unter anderem auch ein Video von mir ,da ist genau das beschrieben und geht nur 6 Minuten.

Es fehlt nämlich eine ganze Menge, wäre es jetzt nur ne Kleinigkeit gewesen hätte ich es dir fix berichtigt .

Liebe Grüße Daniel

Gelöschter Account

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

10.06.2017, 14:09:41 via Website

Danke für eure Hilfe! :):D

Daniel Majunke

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 14:12:44 via Website

hast hinbekommen ?? Durfte leider noch keinen Link posten bin noch zu klein ;)

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

10.06.2017, 14:20:34 via Website

Habe es wie in deinem Video befolgt, aber leider stürtzt die App beim Start immer noch ab. Es steht wieder das gleiche im LogCat wie vorher. :(

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 14:21:45 via Website

hast du es in der Manifest.xml hinzugefügt

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

10.06.2017, 14:23:12 via Website

Ja, habe ich.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 14:29:17 via App

Wie sieht denn dein Xml und Code aus?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 14:29:27 via Website

Dann poste bitte nochmal den Code wie er jetzt aussieht

Gelöschter AccountPascal P.

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

10.06.2017, 14:35:39 via Website

MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private static final String TAG = "MainActivity";

private AdView mAdView;

Button btnKFC;
Button btnBack1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);


    btnKFC = (Button) findViewById(R.id.buttonKFC);
    btnKFC.setOnClickListener(this);
    btnBack1 = (Button) findViewById(R.id.buttonBack1);
    btnBack1.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if(v == btnKFC) {
        Intent intent = new Intent(MainActivity.this, KFC1.class);
        startActivity(intent);
    } else if(v == btnBack1) {
        setContentView(R.layout.activity_main);
    }
}

}

KFC1.java:

public class KFC1 extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_kfc);
}

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 14:37:16 via App

Die genaue Fehlermeldung wäre noch interessant ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

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

10.06.2017, 14:37:47 via Website

Genau die gleiche wie oben. :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 14:41:58 via App

Kann nicht sein du hast den Code verändert also tritt der Feher auch in einer anderen Code zeile auf.

Caused by: java.lang.NullPointerException 
at de.underlp.gutscheintuete.MainActivity.onCreate(MainActivity.java:34) 

Hier war es MainActivity.java Zeile 34..

Welche Zeile ist es diesmal?
Was steht in dieser (da wir keine Zeilennummern haben)

Einfacher: Du postest den neuen Error ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

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

10.06.2017, 14:43:52 via Website

                                                                      Caused by: java.lang.NullPointerException
                                                                         at de.underlp.gutscheintuete.MainActivity.onCreate(MainActivity.java:34)
                                                                         at android.app.Activity.performCreate(Activity.java:5231)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:136) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5017) 
                                                                         at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                         at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                         at dalvik.system.NativeStart.main(Native Method) 

— geändert am 10.06.2017, 14:44:17

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 14:44:06 via Website

Mir ist nicht ganz klar wofür der Back Button ist ,du bist doch in der Main und willst zurück in die Main ???

Fasse es nicht als Angriff auf bin auch noch rechter Anfänger . Wenn du mit dem ersten Button wechselst müsste das gehen.Wenn du den Button back drückst müsste es knallen. Weil du dort kein Intent verwendest . Der Button macht dort auch wenig Sinn wenn du die Activity wechselst hast du den Button doch garnicht mehr . Der Back Button müsste in die KFC1.

Vielleicht verstehe ich deinen Code auch falsch.

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

10.06.2017, 14:46:28 via Website

Der Back Button ist in dem anderen Layout. Also muss ich den in die andere Klasse schreiben oder?

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

10.06.2017, 14:49:38 via Website

Es funktioniert jetzt alles. Danke für eure Hilfe! :D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 14:49:52 via App

Jap das ist hier der Fehler. Du willst einen Button benutzen den es nicht gibt auf dem Layout.

Außerdem: Warum wohl han Android einen Back-Button?
->Damit der Entwickler keinen implementieren muss ;)

— geändert am 10.06.2017, 14:50:40

LG Pascal //It's not a bug, it's a feature. :) ;)

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

10.06.2017, 14:52:28 via Website

Bei mir im Emulator ist er aus der App gegangen wenn ich den Back-Button gedrückt habe. Habe aktuell leider nur ein iPhone da und kann nur im Emulator testen. ;)

Edit:
Jetzt funktioniert es auch mit dem Back-Button.

— geändert am 10.06.2017, 14:53:02

Antworten
Daniel Majunke
  • Forum-Beiträge: 35

10.06.2017, 15:41:57 via Website

Das freut mich sehr, ich habe meines in der Zwischenzeit dank Pascal auch hinbekommen ;)

Ich hab beides ,teste aber am liebsten mit dem Emulator ,finde den eine Ecke schneller, ich glaube Emulator ist kein Nachteil.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.06.2017, 18:58:15 via App

Ich nehme immer direkt mein Gerät. Bin beim Programmieren so lange dabei, dass ich mitbekommen habe wie langsam der Emulator noch zu Zeiten von Android 3.x war. Seitdem hab ich mir das so angewöhnt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Daniel Majunke

Antworten