2014-01-16 117 views
0

我有一個android視圖調用另一個視圖,應該關閉。活動如何開始新活動並關閉自己?

我使用此代碼

 public void onClick(View v) { 
      Intent intent = new Intent(A.this, B.class); 
      startActivityForResult(intent,1); 
      setResult(RESULT_OK); 
      finish();    
     } 

,我看到後活動B是,並呼籲結束,活動A出現

,我明白它從未被關閉。

我該如何解決這個問題?

+0

這對我來說似乎是錯誤的,除了從新活動返回的值之外,在這種情況下,您無法完成當前活動,在開始新活動時沒有除了返回值,可以完成「母親」活動。 –

回答

1

嘗試

public void onClick(View v) { 
    Intent intent = new Intent(A.this, B.class); 
    A.this.finish(); 
    startActivity(intent);  
} 
0

呼叫finish()開始活動

public void onClick(View v) { 
      Intent intent = new Intent(A.this, B.class); 
      finish();    
      startActivityForResult(intent,1); 
      setResult(RESULT_OK); 
     } 
+0

不會在開始新活動之前關閉活動嗎? –

+0

這就是你想要的嗎?關閉活動!是的,它會在開始新的 – SKT

0

你必須使用意圖在那裏你婉開始新的活動

Intent intent=new Intent(MainActivity.this,newActivity.class); 
startActivity(intent); 

之前,你必須覆蓋 MainActivity 的onPause()

@Override 
protected void onPause() { 
    finish(); 
} 
+0

之前完成活動?爲什麼onCreate/onPause? – Blackbelt

+1

您可以在任意位置完成活動,但這是在onPause中完成活動的正確方法,因爲當我們在意圖中調用新活動時,我們的應用程序會進入onPause並暫停我們的活動,因此我通過先完成活動 –

0

試試下面的代碼:

public void onClick(View v) { 
     Intent intent = new Intent(A.this, B.class); 
     startActivity(intent); 
     finish();    
    } 
0
public void onClick(View v) { 
      Intent intent = new Intent(A.this, B.class); 
      startActivity(intent); 
      finish();    
     } 
0

你是從活動開始活動B的結果A

public void onClick(View v) { 
    Intent intent = new Intent(A.this, B.class); 
    startActivityForResult(intent,1); 
    setResult(RESULT_OK); 
    finish();    
} 

所以活動A期待結果由活動交付當活動B完成時。

現在,要解決此問題,請在onActivityResult()開始活動BonActivityResult()開始活動的方法A

// modified onClick method 
public void onClick(View v) { 
    // simply set result to OK and finish activity A 
    setResult(RESULT_OK); 
    finish(); 
} 

在啓動活動A活動中,定義了兩個常量,也可以有一個單獨的Java類中定義的常量和在這個類是指他們。

public static final int REQUEST_CODE_FOR_A = 100; 
public static final int REQUEST_CODE_FOR_B = 101; 

覆蓋活動中的onActivityResult()方法啓動活動A和如下

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if(requestCode == REQUEST_CODE_FOR_A) { 
      // start activity B when activity returns RESULT_OK 
      Intent intent = new Intent(this, B.class); 
      startActivityForResult(intent, REQUEST_CODE_FOR_B); 
     } else if (requestCode == REQUEST_CODE_FOR_B) { 
      // handle the result from Activity B 
     } 
    } 
} 

希望這有助於啓動活動B