![](/img/trans.png)
[英]why Image can return to previous activity but not intent to new activity
[英]Do I need to include a default Intent in order to return to the previous Activity?
我正在開發一個“待辦事項清單” Android應用程序(碰巧是用於一個類的分配,但這不是我要的問題,我已經嘗試了盡可能多的代碼)。 主屏幕顯示待辦事項列表,並在底部帶有一個按鈕,以打開“添加新待辦事項”屏幕。
在“添加新待辦事項”屏幕上,有一個“取消”按鈕。
相關的ToDoManagerActivity.java代碼段:
public void onCreate(Bundle savedInstanceState) {
// Init and setup adapter, etc.
footerView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(ToDoManagerActivity.this, AddToDoActivity.class);
startActivityForResult(intent, ADD_TODO_ITEM_REQUEST);
}
});
// Attach the adapter to this ListActivity's ListView
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
log("Entered onActivityResult()");
// Check result code and request code.
// If user submitted a new ToDoItem
// Create a new ToDoItem from the data Intent
// and then add it to the adapter
}
相關的AddToDoActivity.java代碼段:
protected void onCreate(Bundle savedInstanceState) {
// Initialize default view, handle other events, etc.
final Button cancelButton = (Button) findViewById(R.id.cancelButton);
cancelButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setResult(RESULT_CANCELED, new Intent());
finish();
}
});
}
上面的代碼有效。 以前,我曾在針對cancelButton
的onClick
處理程序中嘗試過此cancelButton
:
public void onClick(View v) {
finishActivity(RESULT_CANCELED);
}
當我單擊“取消”按鈕時,我可以看到在日志中已到達onActivityResult
,但是該屏幕並未恢復為ToDo列表主屏幕。
為什么上面的代碼不能使我返回上一屏幕,但是下面的代碼卻能使我返回上一屏幕? 我對任務堆棧/活動有什么誤解?
public void onClick(View v) {
setResult(RESULT_CANCELED, new Intent());
finish();
}
根據文檔 :
公眾無效表面()
活動完成且應關閉時調用此函數。 ActivityResult通過onActivityResult()傳播回發起您的任何人。
和
公共無效finishActivity(int requestCode)
強制完成您之前使用startActivityForResult(Intent,int)開始的另一個活動。
您應該調用finish()
關閉當前活動,並finishActivity()
關閉使用startActivityForResult(Intent intent, int requestCode)
開始的另一個活動。 在當前活動上調用finishActivity()
不會將其關閉。
同樣,沒有為setResult()
創建新的Intent
也是沒有意義的,因為您不會傳遞任何數據。 這樣做就足夠了:
setResult(RESULT_CANCELED);
finish();
從Android文檔:
public void finishActivity(int requestCode)強制完成您先前使用startActivityForResult(Intent,int)開始的另一個活動。
finishActivity不會完成當前活動,但會為使用requestCode調用的活動調用finish
如果您看一下finishActivity()
的文檔 ,它說它將強制完成以startActivityForResult()
開始的活動,但是您必須傳入用於啟動其他活動的請求代碼。 在您的情況下,它將是ADD_TODO_ITEM_REQUEST
。
這可能不是您要使用的API。 您的第二種方法更干凈,因為您無需強制關閉子項活動,但可以正常方式完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.