2010-11-29 73 views
0

我有一個包含多個活動的應用程序。在主類我打開一個數據庫並創建內容列表,像這樣:Android表單作爲活動

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); 
    } 
} 

這工作得很好,我有在填充了這個數據的主要活動一個ListView。現在,繼續下一步。我正在嘗試啓動一個表單作爲一個新的活動,將添加一個條目到這個列表。活動開展得很好,我能夠輕鬆地創建一個表單。問題是訪問列表添加到它。

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); 
    } 

formDone()的最後一行正確執行。通過調試,我可以進入應用程序類並執行addNumber()。在執行numberList.add(thisNumber);之前,我可以查看它試圖添加到列表中的thisNumber對象的內存內容,並且該數據是正確的。嘗試執行該行,但會以標準Android格式崩潰應用程序。 (使用'Source not found'加載View.class,然後是ZygoteInit $ MethodBlahBlah)。

所以我有點困惑,因爲它看起來像被饋送到addNumber()的數據是正確的,並且當應用程序首先通過從數據庫中的數據構建列表來啓動應用程序時,該功能工作得很好。基本上,我在想這個是否正確?這樣的表單應該是自己的活動,還是有更好的方式來做到這一點?如果它可以是它自己的活動,我做錯了什麼?

謝謝,
內特

+1

我不知道你在做什麼,但`應用程序訪問=新應用程序();`在應用程序中永遠不會有效。 *好的,在某些情況下,但不是在這裏。 – Falmarri 2010-11-29 23:21:47

+0

我重命名了類和對象,以便它們對我發佈的代碼量有意義。也許我在這方面做得不好......「應用程序」只是指主類。我正在創建一個主類的對象來訪問它的成員函數。那是不是有效的?我還會如何訪問私人列表? – linsek 2010-11-29 23:26:31

回答

1

正如Falmarri指出的那樣,它是無效的直接實例化的應用程序或活動類。

相反,您有兩個主要選項用於在活動之間進行通信。

  1. 通過意圖傳遞信息。將電話號碼列表添加到啓動AddNumber的意圖中,並在完成時返回已更改的列表。

  2. 將信息存儲在自定義應用程序中。擴展Application類,(在清單中選擇它作爲Application類)。在那裏存儲你的號碼列表。您可以通過getApplication()從任何活動訪問應用程序類。只需將其轉換爲您的Application類,並訪問該方法。

1

爲什麼用這種方式工作?我認爲最好從MyApplication類中使用startActivityForResult而不是startActivity

https://developer.android.com/reference/android/app/Activity.html

這是更好地使用這種方式,因爲誰知道,內存的原因,你開始的活動可能會破壞之後必須重建,會出現什麼情況的回調呢?不要低估意圖的力量。