2014-09-04 119 views
1

我不知道這是否可行。我擁有的是一個有多個按鈕的活動。每個按鈕都會將用戶帶到一個新的活動,在該活動中用戶輸入一些數據(即firstName)和完成按鈕,然後返回主活動。我還有一個彙總按鈕,可以顯示從各個按鈕輸入的所有內容。我知道如何將數據傳遞給新的活動,但有沒有辦法將數據傳遞到第三個活動?使用Extra將數據傳遞給Android中的其他活動

**讓我看看我能否更好地澄清我的問題。我有3項活動(A,B,C)。活動A是我的主要活動,從A我想去活動B並添加一些數據(如名稱)。然後在活動B中,當我點擊「完成」按鈕時,我會返回到活動A.在活動A中,我點擊「摘要」按鈕並轉到活動C.在活動CI中應該看到一個帶有我在活動B中放置的信息的文本視圖。 *

任何幫助或方向將真的有所幫助。謝謝。 這就是我有兩個活動之間傳遞數據時,作爲一個開始:

這個按鈕帶你到一個頁面中輸入一個名稱

//button to display event name 
    mEventNameButton = (Button) findViewById(R.id.eventNameButton); 
    mEventNameButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(EventDetails.this, EventName.class); 
      startActivity(i); 
     } 
    }); 

在事件名稱活動(1)這裏是代碼我有一個與額外的完成按鈕:

 mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton); 
    mEventNameDoneButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(EventName.this, EventDetails.class); 
      i.putExtra("eName", mEventNameEditText.getText().toString()); 
      startActivity(i); 
     } 
    }); 

這裏是在EventDetails活動(2日)在總結

按鈕

終於在EventSummary活動(第3)中顯示額外的代碼。

mResultEventName = (TextView)findViewById(R.id.resultEventName); 

    Intent i = getIntent(); 
    String eName =i.getStringExtra("eName"); 

    //display info 
    mResultEventName.setText("Event name has been set: " + eName); 
} 

什麼,我得到的是 「事件名稱已被設置爲空」

**編輯** 這是我嘗試,但不理解如何使用onActivityResult的活動Ç 。 更新的代碼:活動A

 //button to display event name 
    mEventNameButton = (Button) findViewById(R.id.eventNameButton); 
    mEventNameButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(EventDetails.this, EventName.class); 
      startActivityForResult(i, 1); 
     } 
    }); 

    //button to display event summary 
    mEventSummaryButton = (Button)findViewById(R.id.eventSummaryButton); 
    mEventSummaryButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(EventDetails.this, EventSummary.class); 
      startActivity(i); 
     } 
    }); 



} 

@Override 
protected void onActivityResult(int RequestCode, int resultCode, Intent data){ 
    if (data == 1) 
    { 
     return; 
    } 

} 

}

Actvity B碼:

//done button to go back to event details 
    mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton); 
    mEventNameDoneButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(EventName.this, EventSummary.class); 
      i.putExtra("eName", mEventNameEditText.getText().toString()); 
      setResult(RESULT_OK, i); 
      finish(); 
      startActivity(i); 
     } 
    }); 

編輯爲onActivityResult:

@Override 
protected void onActivityResult(int RequestCode, int resultCode, Intent data){ 
    if (data != null) 
    { 
     final String eventName = data.getStringExtra("ename"); 
     //button to display event summary 
     mEventSummaryButton = (Button)findViewById(R.id.eventSummaryButton); 
     mEventSummaryButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent i = new Intent(EventDetails.this, EventSummary.class); 
       i.putExtra("ename", eventName.toString()); 
       startActivity(i); 
      } 
     }); 
    } 
+1

您更新的問題是不同的。在'startActivityForResult()' – ataulm 2014-09-04 14:13:54

+0

上查找用法以確認:活動A開始活動B.用戶在活動B中輸入信息,然後單擊完成(關閉活動B,並顯示活動A,該活動在後臺打開)。該信息應該返回到活動A,然後通過額外的方式將信息傳遞給活動C. – ataulm 2014-09-04 14:15:23

+0

這正是我想要做的。謝謝 – hozdaman 2014-09-04 14:17:47

回答

2

如果我沒有理解錯誤,問題是要顯示易名內EventSummary,它是由EventDetails開始,但字符串屬於開始的意圖EventDetails。我認爲你錯過了什麼,不知何故,

Intent i = new Intent(EventDetails.this, EventSummary.class); 
i.putExtra("eName", getIntent().getStringExtra("eName")); 
startActivity(i); 

編輯

我看了你的更新,它實際上會改變你的問題。我想你可以用startActivityForResult從A開始B,爲了提供你想傳遞的信息C.爲此,你必須在A內實現onActivityResult。當你爲B做了,呼籲

setResult(int, Intent); 
finish(); 

上B. A的onActivityResult將被調用,並且其第三個參數裏面,您提供給setResult的目的相同,您可以提取您需要提供到C

信息

EDIT2:在onClickListner內 代碼應該是這樣的:

mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton); 
    mEventNameDoneButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i.putExtra("eName", mEventNameEditText.getText().toString()); 
      setResult(RESULT_OK, i); 
      finish(); 
     } 
    }); 

在Actvity答:

@Override 
protected void onActivityResult(int RequestCode, int resultCode, Intent data){ 
    if (data != null) 
    { 
     // get eName from data 
     // create the new intent to start C 
     // add eName 
     // start C 
    } 
+0

我更新了我的問題,以幫助澄清我的問題。謝謝。 – hozdaman 2014-09-04 14:11:27

+0

謝謝你的回答,這很有道理。我更新了我的代碼,但我想我不理解如何將其轉換爲代碼。我添加了我嘗試的內容(不完整),但不確定接下來要做什麼。任何額外的幫助或樣品都會很棒。謝謝。 – hozdaman 2014-09-04 15:22:11

+0

我更新了我的答案 – Blackbelt 2014-09-04 15:31:04

0

試試這種方式,希望這會幫助你解決你的問題。

mResultEventName = (TextView)findViewById(R.id.resultEventName); 

     Intent i = getIntent().getExtras(); 
     String eName =i.getString("eName"); 

     //display info 
     mResultEventName.setText("Event name has been set: " + eName); 
    } 
相關問題