Variablen für ein gesamtes Paket

Chri

Chri

Fortgeschrittenes Mitglied
0
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
 
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
 
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
 
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:
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!;)
 
Was für Daten willste denn übergeben?

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

Gruß,
Shini
 
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:
Shinigami schrieb:
Was für Daten willste denn übergeben?

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

Gruß,
Shini

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)));
 
hawky99 schrieb:
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)

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
 
Shinigami schrieb:
Hi.

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.

Gruß,
Shini

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:
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
 
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
 
Shinigami schrieb:
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

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:
Jop, Theam abgeschlossen:D
 

Ähnliche Themen

Vapeilas91
  • Vapeilas91
Antworten
3
Aufrufe
685
swa00
swa00
J
Antworten
5
Aufrufe
914
swa00
swa00
netfreak
  • netfreak
Antworten
10
Aufrufe
437
netfreak
netfreak
Zurück
Oben Unten