Soundbuttons funktionieren nicht mehr bei Activitywechsel

M

MichiBeck

Neues Mitglied
0
Hallo zusammen,

ich habe vor einigen Tagen mit der Android Programmierung angefangen und habe mir daher ein paar Tutorials angeschaut.
Nun habe ich das Problem, dass sowohl bei Nachprogrammierung des ersten Tutorials als auch des zweiten Tutorials alles funktioniert, aber bei Kombination von beiden, die App auf dem Handy abstürzt.

Und zwar soll die App das Folgende können:
Ich möchte eine einfache App erzeugen, wo ich oben mit zwei Buttons zwischen verschiedenen Activities wechseln kann und darunter sollen dann jeweils zwei verschiedene Buttons zu finden sein, die bei "onClick" mit einem Sound hinterlegt sind.

So weit bin ich bisher:
Die Buttons erstellen und mit einem String belegen habe ich geschafft. Ebenso habe ich die "Navigation" durch die zwei Buttons oben hinbekommen.
Die Sounds habe ich ebenso hinterlegt (in einem angelegten Ordner namens "raw"). (Aus Testzwecken hat mir hierfür erst einmal ein Sound gereicht, den ich für beide Activities verwendet habe!)

Was funktioniert...
... ich kann die App installieren und öffnen.
... ich kann mit den drei Buttons oben zwischen den Activities hin- und herwechseln.
... ich kann nach dem Start der App die Buttons auf der ersten Activity (nur auf der!) abspielen.

Was nicht funktioniert...
... wenn ich zur zweiten Activity wechsle und dann einen Soundbutton anklicke, beendet sich die App.
... wenn ich zur zweiten wechsle und danach wieder auf die erste gehe, dann beendet sich die App sobald ich einen Soundbutton drücke.

Meine bisherige Überlegung:
Ich könnte mir vorstellen, dass es evtl. daran liegt, dass ich den Sound bzw. die Sounds bei "onCreate" definiere und nach dem Activity-Wechsel es dadurch Probleme gibt. Allerdings bin ich wie oben beschrieben ein Android-Programmier-Anfänger und es könnte auch etwas ganz anderes sein.

Mein Code:
MainActivity.java
Code:
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity {
    
    public MediaPlayer mp;
    //mp = MediaPlayer.create(this,R.raw.lol);
    Button lol;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
    lol = (Button) findViewById(R.id.lol);
        
    lol.setOnClickListener(new OnClickListener() {
        public void onClick (View v) {
            MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.lol);
            mp.start();
       }
                
    });
    
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    public void ersteseiteClick (View view) {
        setContentView(R.layout.activity_main);
    }
    
    public void zweiteseiteClick (View view) {
        setContentView(R.layout.zweiteseite);
    }
    
    
}
activity_main (erste Activity)
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.yorkfunapp.MainActivity" >



    <Button
        android:id="@+id/button2"
        android:layout_width="95dp"
        android:layout_height="35dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:textSize="12sp"
        android:text="@string/erstes" />

    <Button
        android:id="@+id/button1"
        android:layout_width="95dp"
        android:layout_height="35dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/button2"
        android:textSize="12sp"
        android:onClick="zweiteseiteClick"
        android:text="@string/zweites" />

    <Button
        android:id="@+id/lol"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button2"
        android:layout_marginTop="74dp"
        android:layout_toRightOf="@+id/button2"
        android:onClick="mpButtonClick"
        android:text="@string/test" />

</RelativeLayout>
zweiteseite (zweite Activity)
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >
    
     <Button
        android:id="@+id/button4"
        android:layout_width="95dp"
        android:layout_height="35dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:textSize="12sp"
        android:onClick="ersteseiteClick"
        android:text="@string/erstes" />

    <Button
        android:id="@+id/button5"
        android:layout_width="95dp"
        android:layout_height="35dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/button4"
        android:textSize="12sp"
        android:text="@string/zweites" />

    <Button
        android:id="@+id/lol"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button4"
        android:layout_marginTop="104dp"
        android:layout_toRightOf="@+id/button4"
        android:onClick="mpButtonClick"
        android:text="@string/test" />

</RelativeLayout>
Vielen Dank für eure Hilfe im Vorraus. Ich verzweifel an diesem Problem schon viele viele Stunden.
 
Als erstes solltest du herausfinden, wie du in Eclipse/Android-Studio die Logs anzeigen kannst, damit du die Fehlermeldung siehst. In deinem Fall ist der Code ja noch übersichtlich, aber bei komplexeren Apps kannst du nicht mehr entwickeln, wenn du keine genauen Exceptions und Stack-Traces siehst. Stichwort: Logcat

Ausserdem kann man im Forum viel leichter helfen, wenn man eine Exception sehen kann. In deinem Fall dürfte das eine NullPointerException sein, weil es den Button nicht mehr gibt, wenn du ihn nach dem "Activity-Wechsel" anklickst.

Du hast zwar zwei Buttons mit derselben ID, aber das sind dennoch nicht dieselben Instanzen des Buttons. Wenn du also "die Activity wechselst", verweist dein Button lol vermutlich nicht darauf, was du gerne hättest. findViewById sucht die Views nämlich immer in dem Layout, das mittels setContentView gesetzt wurde. In deinem Fall setzt du zuerst Layout 1 und holst von dort den richtigen Button. Daher funktioniert beim ersten mal noch alles. Wechselst du aber das Layout, gibts den vorherigen Button plötzlich nicht mehr.

Wieso schreibe ich immer "Activity wechseln" in Anführungszeichen? Weil du nicht wirklich die Activity wechselst ;) Du tauschst nur das Layout aus, was normalerweise der falsche Weg ist. Siehe Android activity from one screen to another screen.

Es sollte immer etwa so ablaufen:
  1. Activity wird gestartet
  2. onCreate wird aufgerufen
  3. setContentView setzt das Layout
  4. findViewById findet die Views
  5. Ein richtiger Activity-Wechsel findet statt
  6. Die Liste beginnt wieder bei 1, aber in einer anderen Activity-Klasse (oder ähnlich in einem Fragment, das ist aber ein anderes Thema)
 
Zuletzt bearbeitet:
Hey, erst einmal danke für die schnelle Antwort.

Hab mir jetzt erst einmal Logcat installiert, muss aber noch schauen, wie ich mit den Informationen da klarkomme bzw. wie ich damit überhaupt umgehe.

Aber ich denke das spielt denn bei dem Problem hier keine Rolle, da du ja scheinbar weißt woran es liegt bzw. mir das, was du geschrieben hast auch logisch erscheint.

Dummerweise bin ich wirklich noch ein ziemlicher Anfänger, was Android-Programmierung angeht, daher weiß ich noch nicht 100%ig wie ich das nun umsetzen muss.
(also das was bei Klicken des Links steht)
Was ich auf jeden Fall gelernt hab ist, dass Layout-Wechsel != Activity-Wechsel und das man anscheinend mehrere *.java Dateien haben kann, die dann die verschiedenen Activities darstellen.

Ich nehme an, es gibt da keine Möglichkeit das Problem zu fixen, ohne jetzt eine zweite .java Datei zu erstellen?



EDIT: Hat sich erledigt, dass mit dem verlinkten Tutorial hat super geklappt. Hab noch ein bisschen rumgebastelt und das auch mit vielen Activities und vielen Buttons hinbekommen.
Danke vielmals, hat mir sehr geholfen!!!
 
Zuletzt bearbeitet:

Ähnliche Themen

C
  • CoderboyPB
Antworten
3
Aufrufe
928
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
961
swa00
swa00
D
Antworten
17
Aufrufe
409
datNeMo
D
Zurück
Oben Unten