Android ZUgriff auf View/Activity in einer Libary

M

mrdanger

Neues Mitglied
0
Moin alle zusammen,

bin neu hier und bin gerade dabei für meine Abschlussarbeit etwas zu entwickeln. Ich möchte eine Android Project als Libary exportiert. In der dieser soll sich ein Layout (Vierw oder Activity) befinden, welches ich ich im Hauptproject aufrufen möchte.

1) Problem: Activity aus Libary kann ich nicht üner das Manifest einbinden. Ich habe deshalb den Versuch gestartet die View (XML-File) im Hauptprojekt einzubinden. Nun möchte ich diese View übergeben, kann aber keine Instanz davon erstellen. Folgende Sachen habe ich probiert:

Code:
LinearLayout child = (LinearLayout)findViewById(R.layout.feedback);
View child = findViewById(R.layout.feedback);

Leider gibt es immer eine null-Referenz zurück. Mein Ansatz ist wohl grundsätlich falsch. Kann mir jemand da weiterhelfen?
 
Wrum eigentlich nicht? findet es die Klasse nicht oder was?
 
Die Klasse find eich im Code, aber in der Manifest findet er sie nicht oder ich kann sie dort nicht als Activity einbinden.

Ansonsten versuche ich ja den Umweg über ne View...
 
Nun handel ich mir richtig Probleme damit rein. In der Libary wird ein Menu aufgerufen. Dieses liegt in der Libery im Verzeinhnis /res/menu/menu.xml. Ich habe dort mit R.menu.menu.xml gearbeitet. Jetzt sind das ja unterschielder Resourcen und das haut natürlich nicht mit den int Werten des Hauptprojektes hin. Jemand ne Idee wie ich das lösen kann?
 
Zeig mal deinen Manifest.
 
Das ist so gut wie ne Standard Manifestdatei

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.vollmer.usability" android:versionCode="1"
    android:versionName="1.0">
    <application android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name=".uimain">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>
 
Also, wenn du mal in die JAvadoc schaust, findetst du due Methoden
die aus einen XmlPullParses inflaten - nimmst du mal nen Klassloader
( So in der Art: Thread.currentThread().getContextClassloader().getResourceAsStream("/foo/baer.xml") ,
oder this.getClass().getClassloader().getResourceAsStream(...) )

R ist nur für die Bequemlichkeit da
 
Das werde ich mal gleich probieren. Danke. Ich werde aber trotzdem versuchen die Activity zum laufen zu bekommen.
 
Alles klar! Ich hatte nen Fehler gemacht! Er erkennt die Activity in der Manifestdatei. Nun muss ich nur noch hinbekommen, dass er die defnierten XMLLayoutFiles in der entsprechenden Activity benutzt. Diese habe ich ja bisher per R angesprochen und dort stimmen die int-Werte ja nicht.
 
Lade diese selbst über den Classpfad
 
Warum hast du überhaupt vor die View zweimal zu initialisieren? Das habe ich nicht so recht verstanden.

Das jeweilige Layout weist du über setContentView(viewID) zu.

Gruß Tim
 
Beim einlesen bekomme ich ne Exception...

How to inflate layout from the XML out of resource - Android Market Help

InputStreamReader inReader = new InputStreamReader(
getClass().getClassLoader().getResourceAsStream("res/layout/feedback.xml"), "UTF-8");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xml = factory.newPullParser();
xml.setInput(inReader);

So wie dort beschrieben, habe ich versucht die XMLResource einzulesen. leider ohne Erfolg. Damn it!

Ich möchte eine View nicht zweimal initialisieren. Ich habe versucht übere mehrere Wege eien Activity oder View in der Libary anzusprechen. Die Activity bekomme ich angesprochen, aber die lädt halt über R.layout.foo.xml das Layout. Dies klappt natürlich nicht, da der int-Wert ein anderer ist. Deshalb der Weg über den Parser. Leider bekomme ich über den Weg eine Exception.
 
Zuletzt bearbeitet von einem Moderator:
mrdanger schrieb:
Beim einlesen bekomme ich ne Exception...

How to inflate layout from the XML out of resource - Android Market Help



So wie dort beschrieben, habe ich versucht die XMLResource einzulesen. leider ohne Erfolg. Damn it!

Ich möchte eine View nicht zweimal initialisieren. Ich habe versucht übere mehrere Wege eien Activity oder View in der Libary anzusprechen. Die Activity bekomme ich angesprochen, aber die lädt halt über R.layout.foo.xml das Layout. Dies klappt natürlich nicht, da der int-Wert ein anderer ist. Deshalb der Weg über den Parser. Leider bekomme ich über den Weg eine Exception.

meins war an den TE gerichtet ;)

wegen deinem fehler: - ist das "r es" geplant? es müsste eigentlich "res" heißen.

gruß tim
 
Ich bin am verzweifeln. Es gibt wohl keine Möglichkeit diese XML Dateien einzulesen und daraus die entsprechenden Views zu machen.
 
Schicke mir doch mal per PM eine Beispiel-Jar, in der sich ein View befindet der aufgerufen werden soll. Ich habe eine Idee die ich mal ausprobieren will, schließlich lässt sich in der normalen Java-Welt eine Klasse auch dynamisch laden. Ich kann dir aber nichts versprechen...
 
Der m.E. einzig gangbare Weg ist dieser:

Du erstellst ein View dynamisch in einer Methode die sich in der Jar-Datei befindet:
Code:
public class TestView {
  public LinearLayout getTestView(Activity activity) {
    LinearLayout ll = new LinearLayout(activity);
    TextView tv = new TextView(activity);
    tv.setText("Hallo Android-Hilfe-Forum!");
    ll.addView(tv);
    return ll;
  }
}
Diese kannst du dann in dein Projekt einbinden und einfach aufrufen:
Code:
      this.setContentView(new TestView().getTestView(this));
Ich hoffe ich habe halbwegs verstanden was du machen möchtest.

Gruß
Chris
 
  • Danke
Reaktionen: mrdanger
Ich habe mir das fast gedacht. Muss dann meine XML-Files alles dafür so umschreiben. Bleibt mir wohl nichts anderes übrig.


Außer ich schaffe es die Resourcen ohen R. direkt über nen XMLParser einzulesen und dann in einen View zu verwandeln. Ich habe mich daran aber schon probiert und bin gescheitert.

Danke für die Mühe.
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
113
swa00
swa00
B
Antworten
4
Aufrufe
470
bb321
B
D
Antworten
23
Aufrufe
2.497
Data2006
D
Zurück
Oben Unten