0

Also volle Aufnahme, ich bin ein bisschen autodidaktisch, wenn es um Android Dev geht, also mache ich vielleicht alles falsch. Daher bin ich offen für Vorschläge! Ich versuche im Wesentlichen, eine Aufgabe, die ich jeden Tag mache, im Wesentlichen zu automatisieren.Übergabe eines Layouts und dessen Inhalte zwischen Aktivitäten

Frage: Wie ein LinearLayout übergeben wird, ist Inhalt intakt, zwischen Aktivitäten?

So habe ich diese zweite Aktivität, genannt reportGeneratorActivity In dieser Aktivität gibt es ein lineares Layout direkt unter der Berichtsvorschau.

Das Linear-Layout selbst wird in einer separaten XML-Datei als previewplate.xml

Jetzt Funktionen dieser Aktivität definiert, wenn Sie Text in die oberen Felder legen es die Vorschau unten aktualisiert. Das bringt mich zu der Mauer, die ich treffe. Das Ziel ist, diese Vorschauplatte zu nehmen und sie zu meiner Hauptaktivität hinzuzufügen, die ich rootActivity in dem weißen Bereich genannt habe, der ein lineares Layout selbst ist, das rootWorkingLayout genannt wird.

Nun ist die Strings aus dem Text alle auf dem vorübergehend in reportGeneratorActivity gespeicherten Punkt Ich tue dies, wenn die Taste gedrückt wird:

public void beginReport (View view) { 
    //Bundle the Preview 
    Bundle previewBundle = new Bundle();//Create the Bundle 
    previewBundle.putString("date", dateHolder); 
    previewBundle.putString("client", clientNameHolder); 
    previewBundle.putString("machine", machineTypeHolder); 
    previewBundle.putString("serial#", serialNumberHolder); 
    previewBundle.putString("notes", notesHolder); 
    // Prepare The Intent 
    Intent previewPasser = new Intent(this, rootActivity.class); 
    previewPasser.putExtras(previewBundle); // Add the Bundle to Intent 
    //Send Preview to Root 
    startActivity(previewPasser); 
    //Send Preview to History 
    //Send User to Decision Tree 
    } 

Von dem, was ich verstehe, ich habe in Bundle alle Fäden setzen previewBundle, fügte dann das Bundle der previewPasser-Absicht hinzu und schickte die Absicht zurück an rootActivity.

In rootActivity innerhalb der onCreate Funktion ich diesen Code platziert habe:

hier
Bundle previewReceiver = getIntent().getExtras(); 
    //If There is a Bundle, Process it 
    if(previewReceiver != null) { 
     newPreview(previewReceiver); 
    } 

Das Ziel ist es, die Absicht zu packen, und greift das Bündel übergibt es dann zu meiner newPreview Funktion (derzeit leer) das wird dupliziere die fertige Vorschau von report_generator_activity und zeige sie im linearen Layout: rootWorkinglayout auf identische Weise an.

Es ist dieser letzte Schritt, dass ich eine Mauer anschlagen werde, ich kann nur annehmen, dass es einen einfacheren Weg gibt, vielleicht eine Möglichkeit, das Layout und seinen Inhalt zu duplizieren und es zu senden? Oder wenn ich das funktional mache, wie entpacke ich die Daten auf identische Weise?

Bitte verzeihen Sie die Ausführlichkeit und das Fehlen von Bildern, da ich ein neues Mitglied der Gemeinschaft bin.

Edit # 1: Als Reaktion auf SoroushA der ausgezeichnete Antwort, die mich auf dem richtigen Weg gebracht hat, ich habe meine newPreview Methode eingestellt, um dies:

public void newPreview (Bundle previewReceiver) { 
    //Extract Strings from Bundle 
    String date = previewReceiver.getString("date"); 
    String client = previewReceiver.getString("client"); 
    String machine =previewReceiver.getString("machine"); 
    String serialNum = previewReceiver.getString("serial#"); 
    //Create New Inflater 
    LayoutInflater previewInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View previewLayout = previewInflater.inflate(R.layout.previewplate, null); 
    //Add previewLayout to rootWorkingLayout 
    rootWorkingLayout.addView(previewLayout); 
} 

Derzeit Ich versuche nur, um Die graue Box des Layouts der Vorschau, die als Hintergrund angezeigt wird, ist in einer eigenen XML-Datei definiert. Es passiert jedoch nichts, wenn ich aufgrund meines eigenen Fehlers klar durch den Prozess gehe. Ich bin mir nicht sicher, welchen Schritt ich vermisse.

Vielen Dank im Voraus!

+0

Sie sollten die Werte für jeden Container senden. Um es einfach zu machen, erstellen Sie eine benutzerdefinierte Ansicht für die Verwendung beider Aktivitäten. Außerdem sollten Sie keine Daten in das Bundle laden. Einige Telefone haben dafür nicht viel Speicher –

Antwort

0

Ich hoffe, dass ich Ihre Frage klar verstanden habe.

In Ihrer newPreview Methode starten, indem Sie die Saiten wieder aus dem Bundle bekommen:

public void newPreview(Bundle preview){ 
String dateHolder = preview.getString("date"); 
//similarly for other strings 
} 

dann das Linearlayouts aufblasen und beginnen ihre Elemente zu setzen.

LayoutInflater inflater = (LayoutInflater)context.getSystemService 
    (Context.LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.your_xml, null); 
//call findviewbyid on the layout and set its children using the strings you extracted 
+0

Danke SoroushA, ich denke, ich verstehe die Richtung hier. Ich denke jedoch, eine der Lücken in meinem Selbsttraining hat mich ein Element Ihrer Antwort vermisst. Ich kann bestätigen, dass das Bundle die Strings weitergibt, aber das Layout wird immer noch nicht in rootWorkingLayout erstellt. Würden Sie gerne die zweite Hälfte Ihrer Antwort erweitern? Vielen Dank! – VanDroid

+0

Jedes Layout muss aufgeblasen werden, bevor Sie es verwenden können. Üblicherweise blähen Aktivitäten ein Layout mit setContentView (activity_layout) auf. Wenn Sie jedoch eine neue Aktivität erstellt haben und ihr mithilfe von setContentView ein Layout gegeben haben und dann versuchen, eine andere XML-Datei zu öffnen und damit zu arbeiten, müssen Sie sie zuerst manuell mit einem LayoutInflate aufblasen. In meiner Antwort nach dem Aufblasen von your_xml und dem Abrufen des View-Layouts können Sie layout.findViewById (R.id.some_child) aufrufen, um die TextViews und andere Views darin zu erhalten. siehe [hier] (http://stackoverflow.com/questions/3477422/what-does-layoutinflater-in-android-do?rq=1) – SoroushA

+0

Ich denke, ich verstehe, aber um sicherzustellen, dass ich folge, werde ich ein hinzufügen Kommentar oben in Frage, wo ich Code hinzufügen kann. – VanDroid

0

Wie ein LinearLayout übergeben, ist der Inhalt intakt, zwischen den Aktivitäten?

Sie nicht. Widgets und Container (d. H. Unterklassen von View) gehören zu ihrer Aktivität.

ich nur annehmen kann, gibt es einen einfacheren Weg

haben nur eine Aktivität, Änderung seiner Benutzeroberfläche nach Bedarf (zum Beispiel Verwendung Fragmente und ersetzen Sie sie je nach Bedarf). Diese scheinen viel zu eng miteinander verbunden zu sein, um zwei getrennte Aktivitäten zu sein.

Das Ziel hier ist es, die Absicht zu packen, und das Bündel packt dann gibt sie an meine newPreview Funktion (derzeit leer), die fertige Vorschau von report_generator_activity und desplaying innerhalb des Linear-Layouts duplizieren: rootWorkinglayout in identischer Weise.

An diesem Ansatz ist nichts intrinsisch falsch. Sie verhalten sich so, als ob Sie Probleme bei der Implementierung hätten ("Wie entpacke ich die Daten auf identische Weise"), aber wir haben nicht annähernd genug Informationen, um Sie mit viel Rat zu versorgen. Im Allgemeinen verfügt eine Bundle über Getter-Methoden, um die Werte abzurufen, die Sie über die Setter-Methoden in Bundle eingegeben haben.

Verwandte Themen