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

Variablen für ein gesamtes Paket

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Chri, 28.08.2009.

  1. Chri, 28.08.2009 #1
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Hi Leute!

    Nun bin ich auf das nächste Problem gestoßen;)!

    Und zwar muss ich variablen innerhalb eines Paketes (also in mehreren .java files) benützen bzw. hin und her tauschen können!

    Meine Frage: wie kann ich das realisieren?

    Danke im Voraus!

    mfg Chri
     
  2. Shinigami, 28.08.2009 #2
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Hi.

    Ich bin mir unsicher ob folgendes praktikabel noch sinnig ist (aber hauptsache ich hab was gesagt ;):

    Eine (Hilfs-)Klasse mit entsprechenden statischen Attributen könnte es ja tun. Sofern ein entsprechender Import vorhanden ist bei jeder Deiner sonstigen Dateien. Die Variable hießen dann halt Klassenname.Attributname.

    Ansonsten wäre es sicherlich besser die benötigten Informationen an die Methoden zu übergeben wo sie wirklich benötigt werden.

    Grüße,
    Shini
     
  3. Chri, 28.08.2009 #3
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Kapier ich nicht ganz!

    Ich möchte es aber auch lieber mit Intents machen!
    Das gorße Problem dabei ist, ich kapier irgendwie nicht mal, was Intents sind! Nur dass sie zum Austausch von Informationen zwischen Aktivitäten dienen!

    Und genau das brauche ich!

    mfg Chri
     
  4. Shinigami, 28.08.2009 #4
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Hi.

    Kleiner Hinweis: Es ist immer hilfreich gleich zu wissen warum Du was machen willst. Deine vorige Anfrage Variablen über *.java-Dateien hinweg nutzen zu können ist für mich ein bisschen was anderes als das hier :) Nicht jede *.java-Datei ist auch gleich eine Activity.

    Ok ich versuch es mal zu erklären wie ich Intents verstanden habe:
    Intents dienen nicht nur zum Übermitteln von Informationen zwischen Activities sondern ganz allgemein dazu diese aufzurufen! Ein Intent kann dabei Informationen an die aufzurufende Activity übergeben.

    Willst Du z.B. aus einer Deiner Activities eine weitere aufrufen liefe dieses wie folgt:

    1. Neuen Intent anlegen
    Intent i = new Intent(this, NoteEdit.class);

    Dabei ist NoteEdit.class das Ziel dieses Intents also die Activity, die Du aufrufen möchtest.

    Nun könntest Du mit start.Activity(i); Deine Activity aufrufen.

    Möchtest Du nun noch einige Informationen mit auf den Weg geben müssen diese vorher noch im Intent gespeichert werden:
    i.putExtra(String name, value);
    oder
    i.putExtras(Bundle);

    In der Ziel-Activity kommst Du dann z.B. mit getIntent().getExtras() wieder an die Infos.

    Ist aber alles nur ein kratzen an der Oberfläche. Intents sind wohl eine der wichtigstens Sachverhalte bei Android, die man verstanden haben sollte. Hoffe Du beißt Dich durch. Find's toll, dass sich scheinbar doch einige an die Materie trauen. Stehe selbst noch ganz am Anfang.

    Edit: Kleiner Nachtrag: es gibt wohl vielfältige Methoden die sog. Extras in Intents wieder auszulesen. Am besten mal *hier* einen Blick auf alle Methoden werfen wo was mit "extra" im Name vorkommt ;)

    Gruß,
    Shini
     
    Zuletzt bearbeitet: 28.08.2009
  5. Chri, 28.08.2009 #5
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Ok! Diene Erklärung von Intents ist extrem verständlich! Danke!

    Das Problem, dass ich noch habe ist, dass ich noch nicht ganz verstehe, ob ich eine Aktivity starten kann, wenn sie schon da ist:confused:!

    Im speziellen: Ich habe ja die 3 tabs! Und will nun Daten von dem einen Tab, der Informationen aus dem Netz erhält, zu einem anderen Tab geben.

    Der andere Tab ist ja schon sichtbar, also ist die Aktivity ja schon aktiv?! Was hat das dann für eine Ursache, wenn ich sie nochmal starte, bzw. geht das überhaupst?

    mfg Chri

    PS: ist zwar ein wenig unverständlich, ich hoffe aber, ihr kapiert das!;)
     
  6. Shinigami, 28.08.2009 #6
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Was für Daten willste denn übergeben?

    Wie erzeugst Du die Tabs? (Activities per Intent, TabContentFactory, etc)

    Gruß,
    Shini
     
  7. hawky99, 29.08.2009 #7
    hawky99

    hawky99 Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    11.07.2009
    Vielleicht ist das Design zu überdenken: Tabs etc. sind Elemente der Oberfläche, d.h. sie dienen nur dazu, die eigentliche Anwendung zu bedienen. Vorschlag: Schreib deine Anwendung und stell über verschiedene Methoden die Funktionaltität zur Verfügung, die von Tabs, Buttons etc. aufgerufen werden kann. Sämtliche Informationen werden in der eigentlichen Anwendungs- Klasse gehalten, somit ersparst du dir eine Menge Kommunikations- Code der ziemlich fehleranfällig ist. (kurz: Model-View-Controller (MVC) - Pattern)
     
    Zuletzt bearbeitet: 29.08.2009
  8. Chri, 31.08.2009 #8
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Ich möchte einen String übergeben, der dann in einer Liste in einem Anderen Tab angezeigt wird.

    Ich erzeuge einen Tab mithilfe von Intents:

    TH_Tabs.addTab(TH_Tabs.newTabSpec("tab1")
    .setIndicator("Tickets")
    .setContent(new Intent(this, Tickets.class)));
     
  9. Chri, 31.08.2009 #9
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Das hab ich ja am Anfang versucht! Bin aber dann auf das Problem gestoßen, dass ich es nicht geschafft habe eine Tabbele in einem Tab zu erstellen, die auch Klicks verwalten kann.
    Desswegen habe sah ich nur den Ausweg, Eine neue ListActivity zu kreieren und jetzt stehe ich eben vor dem Problem mit der Datenübergabe!

    mfg Chri
     
  10. Chri, 31.08.2009 #10
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Ich habe probiert ein neues Intent in meiner Klasse anzulegen, und bekomme auch compilermäßig keinen Fehler, aber wenn ich dann mein Programm starten will kommt eine Fehlermeldung! Ich schätze, dass ich etwas in der Manifest- Datei änder muss, ich weiß nur noch nicht was:(

    Der Ausschnitt meiner Manifestdatei:

    <application android:icon="@drawable/icon" android:label="@string/app_name">

    <activity android:name=".Settings" android:label="Settings">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.SAMPLE_CODE"/>
    </intent-filter>
    </activity>

    <activity android:name=".Tasks" android:label="Tasks">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.SAMPLE_CODE"/>
    </intent-filter>
    </activity>

    <activity android:name=".Tickets" android:label="Tickets">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.SAMPLE_CODE"/>
    </intent-filter>
    </activity>

    <activity android:name=".WorkingCodes"
    android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>

    mfg Chri
     
    Zuletzt bearbeitet: 31.08.2009
  11. Shinigami, 31.08.2009 #11
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Entferne mal bitte die Intent-Filter für alle Aktivitäten bis auf Deine Haupt(Start)-Aktivität, welche diesen Filter braucht damit es per Icon aufrufbar ist:

    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />

    Intent-Filter brauchste imho nur dann, wenn eine Aktivität auch von anderen Apps aufrufbar sein soll.

    Gruß,
    Shini
     
  12. Chri, 01.09.2009 #12
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Funktioniert trotzdem nicht!

    ich habe die manifestDatei auf 2 Arten geändert, hat aber beides nichts gebraucht!

    1.Art:
    <activity android:name=".Tickets" android:label="Tickets">
    <intent-filter>

    </intent-filter>
    </activity>

    2.Art:
    <activity android:name=".Tickets" android:label="Tickets">

    </activity>

    Was mach ich bloß nur falsch?:confused:

    mfg Chri
     
  13. Chri, 01.09.2009 #13
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Auf einmal hat es Funktioniert!:o
    Meine manifestdatei hat jetzt nur noch einen Intentfilter.
    Ich kann jetzt in einem meiner Tabs ein Intent definieren:

    Intent i = new Intent(this, Tickets.class);

    Auch den Befehl zum Datenhineinspeichern funktioniert zur zeit einwandfrei:

    Bundle b = new Bundle();
    b.putString("test", "teststring");
    i.putExtras(b);


    Nur wenn ich es in dem andere Tab abfragen möchte:

    Bundle bundle = getIntent().getExtras();
    String default_word = bundle.getString("test");


    bricht Android wieder das Programm ab!

    Wenn ich das Intent aber in der Überklasse (jene Klasse, in der ich die Tabs definiere)(das ist auch die klasse mit dem einzigen intentfilter) definiere, kann ich wie oben beschrieben die Daten an mein Tab übergeben!
    Das Problem an dieser Lösung ist, dass ich date aus einem Anderen Tab brauche!!!


    Bitte um Hilfe
     
    Zuletzt bearbeitet: 01.09.2009
  14. Shinigami, 03.09.2009 #14
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
  15. Chri, 03.09.2009 #15
    Chri

    Chri Threadstarter Gewerbliches Mitglied

    Beiträge:
    138
    Erhaltene Danke:
    0
    Registriert seit:
    27.08.2009
    Phone:
    Nexus 4
    Jop, Theam abgeschlossen:D
     

Diese Seite empfehlen