Problem mit Intents und Buttons

  • Antworten:10
Antonio P.
  • Forum-Beiträge: 113

26.11.2014, 15:48:59 via Website

Hallo,

habe ein Problem das mich seid zwei Tagen beschäftigt.

Ich habe eine Activity in der ich über ein "Weiter" Button und "Zurück" Button durch 15 Fragen blättere. Nun wenn ich auf der letzten Seite angelangt bin ändere ich mein Buttontext von "Weiter" zu "Auswerten".
Die Umbennenung erfolgtdurch

btn.setText("Auswerten")

Nun möchte ich am Ende eine neue Activity starten. Ich erzeuge also einen Intent.

PROBLEM:

wenn ich nun zurück blättere bleibt dieses Intent bestehen und startet jedes mal die neue Activity, obwohl ich es nur für die letzte seite benötige.

Jemand eine Idee?

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

26.11.2014, 16:01:20 via Website

Hallo Antonio,
könnstest du ein Bisschen mehr von deinem Code zeigen?
Dann ist es einfacher den Fehler zu finden.



Nach meinem Verständnis: Wenn du einen Intent machst und dann auf den Zurück [Hardwarwe/Software(Android)] klickst dann müsste es gehen.
Nur wenn du einen eigenen Button implementerst hasst du damit schwierigkeiten oder?

LG Pascal

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

Antworten
pepperonas
  • Forum-Beiträge: 434

27.11.2014, 06:50:18 via Website

[[cite Pascal P.]]
Nach meinem Verständnis: Wenn du einen Intent machst und dann auf den Zurück [Hardwarwe/Software(Android)] klickst dann müsste es gehen.
Nur wenn du einen eigenen Button implementerst hasst du damit schwierigkeiten oder?

Hallo,
"normalerweise" stimmt das. Allerdings vermute ich mal sehr stark, dass hier an den Intent-Flags bzw. im Manifest an den Launch-Modes rumgespiel wurde. :)

Die Doku konnte mir vor längerer Zeit nicht großartig bei einem ähnlichen Problem helfen, aber hier findest du ein meiner Meinung nach sehr gutes Tutorial / "Erklärung" triffts wohl besser..

Open Source

Antworten
Antonio P.
  • Forum-Beiträge: 113

27.11.2014, 07:50:40 via App

Hallo,

Danke erstmal.

Richtig! Beim zurück gehen habe ich keine Probleme, sobald ich aber dann wieder nach vorne Blättern möchte, startet die activity obwohl ich nicht auf der letzten Seiten bin bzw mein Button nicht "auswerten" heißt.

Antworten
pepperonas
  • Forum-Beiträge: 434

28.11.2014, 03:15:29 via Website

Hey,
du kannst gerne mal etwas von deinem Code posten, also die Stelle mit dem Intent wäre interessant und gleichzeitig noch das Manifest (bzw. da halt eigentlich nur der "Launch-Mode".

Vielleicht vorweg: finish() rufst du nach startActivity(...) aus?

Open Source

Antworten
Antonio P.
  • Forum-Beiträge: 113

28.11.2014, 18:30:46 via Website

Hallo,

so hier mal mein code. Vorab auf den Button ist ein onClick in XML implementiert.
Der nachfolgende CODE Abschnitt ist in der Methode WeiterButtonClick

if (FragenManager.GetCurrentQuestionNumber() == 14) {
                Button weiterBtn = (Button) findViewById(R.id.Weiter);
                weiterBtn.setText("Auswerten");
                weiterBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                        startActivity(intent);
                    }
                });
            }

Hier meine Manifest!

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
    <activity
        android:name="com.example.einstufungstestmathematik.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.einstufungstestmathematik.TestActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        android:parentActivityName="com.example.einstufungstestmathematik.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.einstufungstestmathematik.MainActivity" />
    </activity>
    <activity
        android:name="com.example.einstufungstestmathematik.ResultActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        android:parentActivityName="com.example.einstufungstestmathematik.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.einstufungstestmathematik.TestActivity" />
    </activity>
    <activity
        android:name="com.example.einstufungstestmathematik.ResultSingleQuestionActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        android:parentActivityName="com.example.einstufungstestmathematik.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.einstufungstestmathematik.ResultActivity" />
    </activity>
    <activity
        android:name="com.example.einstufungstestmathematik.ManualActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        android:parentActivityName="com.example.einstufungstestmathematik.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.einstufungstestmathematik.MainActivity" />
    </activity>
</application>

und hier mein XML Code des Buttons

<Button
            android:id="@+id/Weiter"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_marginLeft="2dp"
            android:text="@string/Weiter"
            android:layout_weight="0.5"
            style="?android:attr/borderlessButtonStyle"
            android:onClick="WeiterButtonClick"/>

Antworten
pepperonas
  • Forum-Beiträge: 434

28.11.2014, 21:26:05 via Website

Okay, jetzt weiß verstehe die obige Frage auch besser :D bzw. das Problem als solches...

Versuche mal Folgendes:

  1. OnClickListener als Interface (also oben hinter den Klassenname implements View.OnClickListener)

  2. die Button initialisierst du lokal in onCreate zb durch Button weiterBtn = (But.... usw.
    dann setzt du gleich danach den Listener also zB weiterButton.setOnclickListener(this);

  3. die Funktion als solche schreibst du ebenfalls um, die kommt einfach in die Klasse ganz normal, zB hinter die onCreate():

zB so..

    @Override
     public void onClick(View view){
          switch(view.getId())    {

         case R.id.DEIN_WEITER_BUTTON
              //        intent anlegen und starten

         case R.id.ZURÜCK
              //        letzte Ansicht laden

}

}

Ob es daran liegt, weiß ich nicht, aber sieht meiner Meinung nach sauberer aus..
Ggf. kannst du noch einen boolean oder einen Zähler hinzufügen (global), der getriggert wird, wenn du deine Methode durchläufst und die neue Activity aufgerufen hast. also so zB

if(isOkay){
     mIsOkay = false;
     startActivitiy(...);
}

Open Source

Antworten
Antonio P.
  • Forum-Beiträge: 113

02.12.2014, 11:22:53 via Website

das funktioniert leider nicht!

Jemand noch ein Vorschlag?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

02.12.2014, 13:11:41 via Website

tl;dr

Wenn du zurück kommst, schau mal ob du mittels setIntent(null) dein verhalten sich ändert wenn die Actvity bei rücksprung wieder aufgerufen wird. Müsste ja die #onActivityResult aufgerufen werden.

..onActivtiyResult(...)
....
....
setIntent(null);

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Antonio P.
  • Forum-Beiträge: 113

03.12.2014, 08:19:10 via App

Okay hab das hinbekommen. Ihr könnt das nicht glauben. Ein einfaches "else" hat gefehlt.

Danke vielmals jetzt kann ich weiter machen

pepperonas

Antworten
pepperonas
  • Forum-Beiträge: 434

05.12.2014, 22:28:08 via Website

Logcat hilft :D (als aller letzte Lösung fällt mir noch der Debugger ein - aber den schmeiß ich überhaupt nicht gerne an) :P

Open Source

Antworten