2010-11-29 5 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()の最後の行が正しく実行されます。デバッグを通して、私はApplicationクラスに進んでaddNumber()を実行します。 numberList.add(thisNumber);を実行する前に、リストに追加しようとしているオブジェクトのthisNumberオブジェクトのメモリの内容を見ることができ、そのデータは正しいです。標準のAndroid形式でアプリケーションをクラッシュさせますが、その行を実行しようとしています。 ( 'ソースが見つかりません'、続いてZygoteInit $ MethodBlahBlahを持つView.classをロードします)。

addNumber()に供給されるデータが正しいと思われ、データベースのデータからリストを作成してアプリケーションが最初に起動したときに機能が完全に正常に機能するように見えるため、ちょっと混乱します。基本的に、私はこれについて正しい考えですか?このようなフォームは自分のアクティビティなのか、それとももっと良い方法があるのでしょうか?それが自分自身の活動である場合、私は何を間違っているのですか?

おかげで、
ネイト

+1

あなたは何をしているのか分かりませんが、アプリケーションでは 'Application access = new Application();'は決して*有効ではありません。 *確かに、状況によっては、ここではありません。 – Falmarri

+0

クラスとオブジェクトの名前を変更して、投稿したコードの量に意味があるようにしました。たぶん私はそれで偉大な仕事をしなかった... "アプリケーション"は、メインクラスを参照してください。私はそのメンバ関数にアクセスするためのメインクラスのオブジェクトを作成しています。どのように有効ではないのですか?他にどのようにプライベートリストにアクセスできますか? – linsek

答えて

1

Falmarriが指摘したように、直接、アプリケーションやアクティビティのクラスをインスタンス化するために有効ではありません。

代わりに、アクティビティ間で通信するための2つの主要なオプションがあります。

  1. インテントで情報を渡します。 AddNumberを開始するインテントに追加として電話番号リストを追加し、完了したら変更されたリストを返します。

  2. カスタムアプリケーションに情報を格納します。 Applicationクラスを拡張します(マニフェストでApplicationクラスとして選択します)。あなたの番号リストをそこに保管してください。 getApplication()によって、任意のアクティビティからApplicationクラスにアクセスできます。それをアプリケーションクラスにキャストし、そのメソッドにアクセスしてください。

+0

助けてくれてありがとう。私はstartActivityからstartActivityForResultに切り替え、メインアプリケーションにデータを戻してリストに追加することができました。 – linsek

1

なぜこのように動作しますか? MyApplicationクラスのstartActivityではなく、startActivityForResultを使用する方が良いと思います。

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

誰が知っているので、それはメモリ上の理由から、この方法でそれを使用することをお勧めしますが、ご出発の活動は、その後再構築するために破壊されてしまうかもしれませんし、何を、あなたのコールバックになりますか?意図のパワーを過小評価しないでください。

関連する問題