2016-04-21 91 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了解如何使用它。它非常快速和简单。