2012-01-19 7 views
3

これは私の最初の投稿ですので、素敵にしてください:) 私は質問があり、誰も私が見た投稿の答えを出しませんでした。アクティビティをリフレッシュして再開

私のアプリには、アクティビティを開くためのリストとボタンがあります。このアクティビティでは、Createボタンを押すと、前のアクティビティのリストに表示する新しいアイテムが作成されます。

どうすればいいですか?

これは私が最初のボタンのために作られたコードですので、

Intent intent = new Intent(getBaseContext(), TestListActivity.class);      
startActivity(intent); 

しかしGOBACKのコードが有用である:

intent = new Intent(this.getBaseContext(), NewTestActivity.class); 
this.finish(); 
startActivity(intent); 

と、これはリフレッシュを戻るためのコードですアクティビティは更新されません。 新しいアクティビティを別の方法で呼び出す必要がありますか?あるいは、別の方法で前の活動に戻ることができますか?あるいは、私が以前の活動に戻ったときに正常に戻り、活動をリフレッシュしますか?

まあ...これはすべてです。 私の悪い英語のため申し訳ありませんが、この質問が別のスレッドで回答されている場合は、私にそれを見つけることができないため、私にはリンクを教えてください:)

PS:私は12月にアンドロイドで始まりました。

ありがとうございました。

+0

onResume()メソッドにコードがありますか?通常、後続のアクティビティ呼び出しに対してonResumeが呼び出されます。 – kosa

+0

いいえ、リストをロードするアクションはonCreate()メソッド内にあります。 – AuTi

+0

onResume()にも同じものを追加してみてください。 – kosa

答えて

1
  1. 新しい動作を開始するときは、実際にこの動作が必要になるまで、現在の動作を終了しないでください。 (コードからthis.finish();行を削除してください)
  2. 実際に必要になるまで、手動でアクティブなアクティビティを閉じるべきではありません。ユーザーがデバイスの「戻る」ボタンを押すと、Androidは前のアクティビティを「バックスタック」からポップします。もう一度Activityのドキュメントをお読みください。
  3. あなたの説明によると、要素のリストがあります。したがって、リストを更新するには、データセットを更新し、ListView.notifyDataSetChanged()メソッド呼び出しによってそのリストを通知する必要があります。
1

実際の回答になる前に、コードをいくつか改善してみたいです。 まず、(あなたが一般的にコンテキストを必要とする場合または)Activityからテントを作成するときにgetBaseContext()をコールする必要はありませんが、あなただけのthisを使用することができます。

intent = new Intent(this, NewTestActivity.class); 

第二に、アンドロイドは、活動を扱うのが得意ですfinish()で最初のアクティビティを手動で終了する必要はありません。 Androidは自動的に最初のアクティビティを一時停止または停止し、戻ったときに戻します。

第3に、あなたのケースでは、の代わりにstartActivityForResult()の代わりに、以下で説明する理由があります。
これはあなたのコードを見て、次のように行います:

private static final int MY_REQUEST_CODE = 33487689; //put this at the top of your Activity-class, with any unique value. 
intent = new Intent(this, NewTestActivity.class); 
startActivityForResult(intent, MY_REQUEST_CODE); 

は今、startActivityForResult()は、活動を開始し、その新しい活動からの結果を待ちます。あなたは新しい活動にfinsih()を呼び出すと、あなたが今閉じている新しいActivtyから供給されたデータで、最初Activitys onActivityResult() -methodになってしまいます。このすべてのために

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode != MY_REQUEST_CODE) return; //We got a result from another request, so for this example we can return. 
    if(resultCode != RESULT_OK) return; //The user aborted the action, so we won't get any data. 
    //After the above if-statements we know that the activity that gives us a result was requested with the correct request code, and it's action was successful, we can begin extracting the data, which is in the data-intent: 
    Item item = (Item) data.getSerializableExtra("customData"); //casts the data object to the custom Item-class. This can be any class, as long as it is serializable. There are many other kinds of data that can be put into an intent, but for this example a serializable was used. 
    itemList.add(item); //This is the list that was specified in onCreate() 
    //If you use an Adapter, this is the place to call notifyDataSetChanged(); 
} 

が動作するように、我々はいくつかを行う必要があります第二の活動で物事:アイテムが作成されたとき、我々は結果を設定する必要があり :

//We begin by packing our item in an Intent (the Item class is an example that is expected to implement Serializable) 
Item theCreatedItem; //This is what was created in the activity 
Intent data = new Intent(); 
data.putSerializable(theCreatedItem); 
setResult(RESULT_OK, data); 
finish(); 

前述したように、これは、項目の最初のActivitys onActivityResult() -methodに返す必要があります。

+0

waw ...本当に明白です...しかし、私は私が欲しいことをするための最善の方法があると思います。 私が表示するたびにアクティビティをリフレッシュするだけです...何も変わりません。 本当にありがとうJave ... u r素晴らしい教師! – AuTi

+0

非常に良い、あなたのプロジェクトで幸運: – Jave

+0

私は言っているように、ソリューションは非常に簡単だった、私はオペレータプライベートを別のクラスの機能でpublicに変更したいです。その後、私が望む更新リスト機能を使用してください:) 非常にありがとうurヘルプ! – AuTi

関連する問題