Ich habe eine Anwendung mit mehreren Aktivitäten. In der Hauptklasse öffne ich eine Datenbank und eine Liste der Inhalte erstellen, wie so:Android Form als Aktivität
public class MyApplication extends Activity
{
private List<PhoneNumber> numberList;
public void onCreate(Bundle savedInstanceState)
{
...
numberList = new ArrayList<PhoneNumber>();
...
loadDatabase()
...
}
private void loadDatabase()
{
// File IO and parsing stuff
addNumber(thisNumber); // executes for each entry
}
public void addNumber(PhoneNumber thisNumber)
{
numberList.add(thisNumber);
}
}
Dies funktioniert gut, und ich habe eine Listview in der Haupttätigkeit, die mit diesen Daten gefüllt wird. Jetzt geht es weiter zum nächsten Schritt. Ich versuche ein Formular als neue Aktivität zu starten, die einen Eintrag zu dieser Liste hinzufügen wird. Die Aktivität startet gut und ich konnte problemlos ein Formular erstellen. Das Problem besteht darin, auf die Liste zuzugreifen, um sie hinzuzufügen.
public class AddNumber extends Activity
{
...
// This function is called from the done button
// <Button android:text="Done" android:onClick="formDone"/>
public void formDone(View v)
{
// findViewByIds here to get data from form.
// This is done correctly and I can see my data in memory
MyApplication access = new MyApplication();
PhoneNumber newNumber = new PhoneNumber();
// Fill newNumber object with data from form. Done correctly. Verified
access.addNumber(newNumber);
}
Die letzte Zeile von formDone()
wird ordnungsgemäß ausgeführt. Durch das Debugging kann ich zur Application-Klasse wechseln und sie führt addNumber()
aus. Bevor ich numberList.add(thisNumber);
ausführe, kann ich den Inhalt des Speichers für das thisNumber
Objekt betrachten, das versucht wird, der Liste hinzuzufügen, und diese Daten sind korrekt. Der Versuch, diese Zeile auszuführen, stürzt die Anwendung jedoch im Standard-Android-Format ab. (Lädt View.class mit 'Source not found' gefolgt von ZygoteInit $ MethodBlahBlah).
So bin ich ein wenig verwirrt, weil es aussieht, als ob die Daten addNumber()
korrekt ist, und die Funktion funktioniert einwandfrei, wenn die Anwendung zum ersten Mal durch Erstellen der Liste aus den Daten in der Datenbank startet. Grundsätzlich denke ich darüber nach, richtig? Sollte eine Form wie diese eigene Aktivität sein oder gibt es einen besseren Weg? Wenn es seine eigene Aktivität sein kann, was mache ich falsch?
Danke,
Nate
Ich habe keine Ahnung, was Sie tun, aber 'Anwendungszugriff = neue Anwendung();' ist nie * in einer Anwendung gültig. * Ok vielleicht unter bestimmten Umständen, aber nicht hier. – Falmarri
Ich habe die Klassen und Objekte umbenannt, damit sie mit der Menge an Code, die ich gepostet habe, Sinn ergeben würden. Vielleicht habe ich keine gute Arbeit geleistet ... "Bewerbung" bezieht sich nur auf die Hauptklasse. Ich erstelle ein Objekt der Hauptklasse, um auf seine Mitgliedsfunktionen zuzugreifen. Wie ist das nicht gültig? Wie sonst würde ich auf die private Liste zugreifen? – linsek