2010-11-29 75 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

这是更好地使用这种方式,因为谁知道,内存的原因,你开始的活动可能会破坏之后必须重建,会出现什么情况的回调呢?不要低估意图的力量。