2016-04-21 72 views
0

這個問題很簡單。 例如有2項活動主要活動和主要活動2. 如何從主要活動向主要活動2發送字符串(例如) 假設主要活動2獲得字符串。它調用一個函數來更改該字符串。 然後如何將修改後的字符串發送回主活動?在活動之間發送變量

+1

您將其作爲結果意圖的一部分返回 –

回答

0

從主要活動1發送字符串:

   Intent intent = new Intent(this, MainActivity2); 
       intent.putExtra("string", stringVal); 
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intent); 

然後在主要活動中2,得到的字符串:

String str = getIntent().getExtras().getString("string"); 

然後,只需更改值,並將其發送回主要活動1,如果需要,您可以在onResume中獲得意圖,但檢查是否存在空值。

+0

因此,當主活動2收到該字符串並對其進行一些更改時。我可以通過使用上面編寫的類似代碼將它發回主活動活動,只需將MainActivity2更改爲MainActivty並更改putExtra()的值? – Nikola

+0

正確,試一試 –

+0

這有效,但它並不安靜,我正在尋找。我的問題不夠具體,併爲此感到遺憾。其實我想要的是留在主要活動的佈局頁面,而不是主要活動2發送字符串到主要活動2,它的佈局彈出在我的設備上。長話短說,主要活動2接收字符串和設備始終停留在主要活動佈局。主要活動2更改字符串(假設只替換2個字母),並將字符串發回主活動,我可以實際看到更改(例如,在文本視圖中)。 – Nikola

0

的標準方式:

如果你想從活動1發送原始數據,以活性2,您需要使用Intent。例如,如果你只是想發送一個字符串:

public class Activity1 extends Activity { 
    public static final String EXTRA_STRING = "extra_string"; 

    private void sendString(String s) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra(EXTRA_STRING, s); 
     startActivity(intent); 
    } 
} 

假設你改變活性2該字符串,也希望結果返回到活動1,你需要在Activty2使用的活性1 startActivityForResult()setResult()

例如:

public class Activity1 extends Activity { 
    public static final String EXTRA_STRING = "extra_string"; 
    private static final int REQUEST_CODE = 1; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
     if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 
      // Get the string back 
      String changedString = data.getStringExtra(Activity2.EXTRA_STRING); 
     } 
    } 


    private void sendString(String s) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra(EXTRA_STRING, s); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 
} 

在活性2:

public class Activity2 extends Activity { 
    public static final String EXTRA_STRING = "string_extra"; 
    private String myString; 

    @Override 
    public void onCreate(Bundle bundle) { 
     // receive the string from activity1 
     if (getIntent() != null) { 
       myString = getIntent().getStringExtra(Activity1.EXTRA_STRING); 
     } 
    } 

    // Send the string back to activity1 
    private void sendBack() { 
     Intent data = new Intent(); 
     data.putExtra(EXTRA_STRING, myString); 
     setResult(RESULT_OK, data); 
     finish(); 
    } 
} 

該方法的缺點是隻能發送原語的變量。如果要發送對象,則必須執行ParcelableSerializable

的快速簡便的方法:

您可以發送任何類型的變量,活動,服務或任何你想使用EventBus之間的任何複雜的對象。請查看Documentation瞭解如何使用它。它非常快速和簡單。

相關問題