2013-12-20 47 views
0

我有一個主要活動啓動其他活動,然後,主要活動應接收來自上次活動的信息。但是當我完成最新的活動時,我來到第二個,當然不是主要的活動。如何在沒有開始新的情況下到達那裏? 非常感謝,Vinzenz :)如何返回到發送信息的舊活動

下面是它的一部分:(editet)

我很抱歉,但我不明白這一點。 在我的MainActivity我開始第二個用:

@Override 
public void onClick(View arg0) { 
    Intent i = new Intent(getApplicationContext(), SecondActivity.class); 
    startActivityForResult(i, currentxyzIndex);   
} 

在第二個活動,我開始了另一種搭配:

@Override 
public void onClick(View arg0) { 
    Intent i = new Intent(getApplicationContext(), ThirdActivity.class); 
    startActivityForResult(i, 100); 
    finish();   
} 

而在這其中我想回到第一個:

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

    int xyzIndex = position; 

    Intent in = new Intent(getApplicationContext(), 
        MainActivity.class); 

    in.putExtra("xyzIndex", xyzIndex); 
    setResult(100, in); 

    finish(); 
} 
+0

你可以在第二個Activity中調用完成, –

+0

但是我不能啓動這一個,因爲每次我想打開它時都會關閉它? – vinzzenzz

+0

'finish()'將關閉您從中調用的活動。你的問題實在難以遵循。請編輯您的問題並明確說明您有多少活動(例如活動A,活動B,活動C),並提供所需的流程(例如,應用程序在活動A打開,然後單擊按鈕並打開活動B,然後B中另一個按鈕被點擊,B應該關閉,並返回到A)。 – ataulm

回答

2

你應該開始SecondActivitystartActivityForResult()並在MainAcitvity onActivityResult()覆蓋。這樣,當您在SecondActivity上調用finish()時,將調用MainActivity的onActivityResult()。 onActivityResult的簽名是

protected void onActivityResult(int requestCode, int resultCode, 
      Intent data) 

如果finish()您SecontActivity之前,你叫setResult(int, Intent),最後一個將是onActivityResult

+0

我很抱歉,但我沒有得到它的運行。也許你想閱讀我的editet quistion並再次幫助我。謝謝很多。 – vinzzenzz

+0

您是否閱讀過有關startActvityForResult和onActivityForResult的文檔? – Blackbelt

+0

我認爲是的。 :/ – vinzzenzz

1

參數數據,我想我現在明白你的問題,但你應該把它編輯到使其更清晰。我會總結一下我認爲你想要做的事情。

有三種活動:A,B和C

在活動A,你有一些按鈕或視圖,點擊後,會打開活動B與startActivityForResult()

在活動B中,您有一些按鈕或視圖,點擊它們後,將打開活動C與startActivityForResult()

在活動C,你設置一些數據,設置結果,並調用完成,希望能返回到活動A.


隨着黑帶所指出的,你應該用你的活動onActivityResult(int, int, Intent)。這應該是在使用startActivityForResult()即每活動,活動A和B.活動

活動答:

onClick() { 
    startActivityForResult(new Intent(this, ActivityB.class), currentxyzIndex); 
} 

@Override 
onActivityResult(int requestCode, int resultCode, Intent data) { 
    // this is the data that comes back from Activity B when Activity B calls finish() 
    // do as you need 
} 

活動B:

onClick() { 
    startActivityForResult(new Intent(this, ActivityC.class), 100); 
    // do not call finish here! 
} 

@Override 
onActivityResult(int requestCode, int resultCode, Intent data) { 
    // this is the data that comes back from Activity C when Activity C calls finish() 

    // set the data as the result 
    setResult(...); 

    // then you can finish 
    finish(); 
} 

活動C是你做的,我相信。

它聞起來很腥,你的應用程序架構要求你這樣做;也許如果你用關於域的信息來描述你的問題,並且每個活動的目的是什麼(每個用戶代表什麼),它可能會被重新配置。

相關問題