[英]android how to finish an activity from other activity
在我的應用程序中,我有3個活動。
從第1次活動到第2次,第2次到第3次。 從3日開始,它再次升至第1名。 如果我從第一個按回鍵,那么它應該進入主屏幕(應用程序將停止)。 如果我按下第一個鍵,它再次進入第二個活動,如果我按下第二個后退鍵,那么它將轉到第一個。 然后,如果我按回1鍵,則應用停止。
我想要什么,當我在第三個活動並按下后退按鈕然后它應該到第一個並同時完成第二個活動。
我怎樣才能做到這一點?
剛打開第三個活動時完成第二個活動
假設在某個按鈕點擊的第二個活動中,您正在使用開始活動打開第三個活動;
startActivity(intent);
finish();//this will finish second activity and open third activity so when you press back from third activity it will open first activity.
如果你想依賴某些條件然后依賴於活動
setResult(123);
像這樣的代碼
現在在第二個活動中覆蓋onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==123){
//finish
}
}
還要確保你需要使用startActivityForResult(intent,requestCode); 導致第二次活動開始第三次活動。
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Activity2 extends Activity{
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(new Intent(Activity2.this,Activity3.class)), 12);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==123 && requestCode==12){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Activity3 extends Activity{
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(123);
}
});
}
}
當你開始你的第三個活動時,你應該打電話給你的第二個活動:
startActivityForResult(intent, 0)
完成第3項活動后,您應該包括:
setResult(RESULT_OK);
finish();
它從第3個活動向第2個活動發送信號。
在第二次投入:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
finish();
}
它接收到這個信號並完成第二個活動。
當您需要完成第二個活動時,您應該使用cleartop標志在第三個活動中啟動第一個活動。
class ThirdActivity extends Activity {
....
if (somecondition) {
/* directly go to FirstActivity, finish all intermediate ones.*/
Intent intent = new Intent(this, FirstActivity.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else {
finish(); // to simply return to 2nd activity.
}
.....
....
}
使用這種方式:在你的第一個活動中,聲明一個這樣的Activity對象,
public static Activity fa;
onCreate()
{
fa = this;
}
現在在另一個Activity中使用該對象來完成這樣的第一個活動,
onCreate()
{
FirstActivity.fa.finish();
}
更多信息: 完成其他活動的活動
或者,您可以在第二個活動上設置名為FLAG_ACTIVITY_NO_HISTORY
的意圖標記。 這樣它就不會保留在歷史堆棧中,因此當您從第3個活動導航回來時,它將直接轉到第1個活動。
例如
Intent intent = new Intent(this, SecondActivity.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
這意味着當您從SecondActivity
啟動活動時, SecondActivity
將自動完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.