1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

StartActivityForResult() aufrufen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Razer6, 20.06.2010.

  1. Razer6, 20.06.2010 #1
    Razer6

    Razer6 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    20.06.2010
    Hallo an alle,

    Für eine PreferenceActivity habe ich ein eigenes Controll abgeleitet von Preference geschrieben:

    public class CustomPreferenceControl extends Preference
    {
    }

    Das Element enthält inen OnItemClickListener(). Bei Click auf das Element soll ein neues Activity gestartet werden mittels startActivityForResult(). Die Rückgabewerte sollen wiederrum in aufgefangen werden.

    Wie löse ich das am Besten, da CustomPreferenceControl ja nicht von Activity abgeleitet ist.

    Ich hoffe ihr könnent mir helfen.

    Danke im Voraus
    Robert
     
  2. FelixL, 21.06.2010 #2
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
  3. Razer6, 21.06.2010 #3
    Razer6

    Razer6 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    20.06.2010
    Hallo Felix,

    So einfach geht das leider nicht.

    Übergebe ich das Parentactivity im Konstruktor, kann ich zwar startActivityForResult() aufrufen aber wie implementiere ich da onActivityResult() die ja eine deleigierte Methode der Klasse Activity ist.


    Das größere Problem ist jedoch, ich instanziere das CustomPreferenceControl ja nicht manuell, das geschieht über die preference.xml - Somit kann ich die Parent-Activity auch nicht übergeben.

    Danke für Hilfe!
    Robert
     
  4. funk, 22.06.2010 #4
    funk

    funk Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    @FelixL

    Hallo Felix,

    so ganz passt das snipplet aber auch nicht, oder?
    Im ersten Aufruf ist diffTime ja System.currenTimeMillis() - (-1) da ja
    lastUpdate mit -1 initialisiert wird. Damit ist diffTime + 1 irgendein krass
    hoher Wert, da ja System.currentTimeMillis () die Zeit in Millisekunden seit
    1.1.1970 ausgibt....

    Außerdem wunder es mich, dass er Millisekunden durch 10 000 dividiert
    und nicht durch 1000....und unsere schöne Vektoraddition mit der Wurzel
    der Quadratsummen fehlt auch!

    Oder sehe ich das falsch?

    Wie könnte man das denn jetzt in ner anderen .java Klasse aufrufen?

    Gruß,
    Frank
     
  5. FelixL, 22.06.2010 #5
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Du bist im falschen Thread ;)

    Aber um deine Fragen zu beantworten (mal aus dem Kopf auf die Schnelle, ohne noch mal reinzuschauen):
    Ja, diffTime ist ein extrem hoher Wert beim ersten mal. Das ist aber richtig so, weil sicher gestellt sein muss, dass diffTime nicht 0 oder sehr niedrig wird, weil sonst das shake-event ausgelöst würde...oder durch 0 geteilt würde, was auch nicht so gut wäre.

    Das Dividieren durch 10.000 geht auch in Ordnung, oben wird FORCE_TRESHOLD auch nicht mit 900 initialisiert. Auf jeden Fall funktioniert es so. Ich hab es sogar für meine Zwecke auf 1500 geändert, weil es mir vorher zu oft angeschlagen hat.

    Und dass die Vektoraddition fehlt liegt ganz einfach daran, dass du im falschen Thread bist :p

    Aufrufen tust du das über
    import com.gedankentank.android.sensor.AccelerometerListener
    (wobei das Package auf dein eigenes geändert werden sollte, weiß nicht ob das nötig ist, ich hab es mal gemacht)
    AccelerometerListener mAL = new AccelerometerListener(this);
    (ich habe im AccelerometerListener die Activity Parent zum Context ctx geändert, weil ich einen Service benutze, der dieses Objekt benutzt)
    dann noch mAL.start() zum starten und mAL.stop zum stoppen, ausserdem im AL selbst noch irgendwas einbauen, was die Überaktivity alamiert. Ich hab das etwas unsauber über einen Intent gemacht, geht wahrscheinlich sauberer. Hatte es auch nur zu Testzwecken drin, hab dann gemerkt das mein Hero alle Sensoren beim Bildschirm-ausschalten mit ausschaltet. Damit wurde das für meine Zwecke komplett sinnlos.

    Aber zurück zum Thema:


    In was sollen sie denn nun wieder aufgefangen werden? ;)
    Ich denke, wenn du es schaffst, die Activity zu übergeben, wird automatisch das onActivityResult() der Activity die du übergeben hast aufgerufen. Ist das nicht in deinem Sinn?
    Selbst wenn nicht, kannst du nicht weitere Methoden in deine Preference einbauen, um im Nachinein noch von der Activity aus darauf einzuwirken?
    Damit könntest du z.B. im onCreate der Activity schon die Activitity parent in der Preference setzen, oder im onActivityResult die Werte an die Preference übergeben.

    Hab sowas noch nie gemacht, das ist nur der Weg wie ich ihn mir vorstelle ;)
     
  6. Razer6, 22.06.2010 #6
    Razer6

    Razer6 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    20.06.2010
    Hallo Felix,

    Zu meinem Problem, Ich habe ein eigenes Preference, das bei einem Klick darauf ein Activity (einen File Browser) öffnen soll.

    Um schön generisch zu bleiben und um die Wiederverwendbarkeit zu erhöhen, will ich, dass eben die Activity von der Preference Klasse aus aufgerufen will.

    Das Problem ist aber, das ich die Preferece-Activity ja nicht manuell erstelle - die wird aus einer XML-Datei heraus gestellt:
    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ListPreference>
    ....
    ></ListPreference>

    <razer.preferencetest.PathPreference>
    ....
    </razer.preferencetest.PathPreference

    </PreferenceScreen>

    Ich erstelle kein Objekt der meiner Preferenceklasse mit der "Hand". Somit kann ich ihr auch selber im Code nichts übergeben.

    Ich hoffe das beschreibt da Problem

    Robert
     
  7. FelixL, 24.06.2010 #7
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Sorry, da kann ich dir nicht weiterhelfen. Vielleicht findet sich ja jemand anderes hier im Forum :/
     

Diese Seite empfehlen