如何从一个活动发送string到另一个?

所以我在activity2中有一个string

String message = String.format( "Current Location \n Longitude: %1$s \n Latitude: %2$s", lat, lng); 

我想将这个string插入到activity1的文本字段中。 我怎样才能做到这一点? 先谢谢你。

Solutions Collecting From Web of "如何从一个活动发送string到另一个?"

您可以使用意图,即在活动之间发送的消息。 在一个意图,你可以把所有的数据,string,整型等

在你的情况下,在activity2 ,在去activity2之前,你将以这种方式存储一个String消息:

 Intent intent = new Intent(activity2.this, activity1.class); intent.putExtra("message", message); startActivity(intent); 

activity1onCreate() ,你可以通过检索一个Bundle (包含调用活动发送的所有消息)并调用getString()来获取String消息:

 Bundle bundle = getIntent().getExtras(); String message = bundle.getString("message"); 

然后你可以在TextView设置文本:

 TextView txtView = (TextView) findViewById(R.id.your_resource_textview); txtView.setText(message); 

希望这可以帮助 !

你可以用一个Intent从一个活动向另一个发送数据

 Intent sendStuff = new Intent(this, TargetActivity.class); sendStuff.putExtra(key, stringvalue); startActivity(sendStuff); 

然后,您可以通过获取意图并提取额外的string来在第二个活动中检索此信息。 在onCreate()方法中执行此操作。

 Intent startingIntent = getIntent(); String whatYouSent = startingIntent.getStringExtra(key, value); 

然后,你所要做的就是在你的TextView上调用setText并使用该string。

说你的MainActivity中有EditText et1,你想把它传递给SecondActivity

 String s=et1.getText().toString(); Bundle basket= new Bundle(); basket.putString("abc", s); Intent a=new Intent(MainActivity.this,SecondActivity.class); a.putExtras(basket); startActivity(a); 

现在在第二个活动中,说你想把从EditText et1传递给SecondActivity的TextView txt1的string

 Bundle gt=getIntent().getExtras(); str=gt.getString("abc"); txt1.setText(str); 
  Intent intent = new Intent(activity1.this, activity2.class); intent.putExtra("message", message); startActivity(intent); 

在activity2中,在onCreate()中,你可以通过检索一个Bundle(包含调用活动发送的所有消息)并调用getString()来获得String消息:

  Bundle bundle = getIntent().getExtras(); String message = bundle.getString("message"); 

意图很激烈 。

Intents对于围绕android框架传递数据非常有用。 您可以与自己的Activities甚至其他进程沟通。 查看开发者指南,如果你有特定的问题(这是很多消化前面)回来。

您可以使用GNLauncher,它是我在与Activity需要大量交互的情况下编写的实用程序库的一部分。 对于库来说,就像使用所需参数在Activity对象上调用函数一样简单。 https://github.com/noxiouswinter/gnlib_android/wiki#gnlauncher

为了将activity2中的文本插入activity1 ,首先需要在activity2中创build一个访问函数。

 public void visitactivity1() { Intent i = new Intent(this, activity1.class); i.putExtra("key", message); startActivity(i); } 

创build这个函数后,你需要从你的activity2的 onCreate()函数中调用它:

 visitactivity1(); 

接下来,继续执行activity1 Java文件。 在onCreate()函数中,创build一个Bundle对象,通过此对象通过其键获取先前的消息,并将其存储在一个String中。

  Bundle b = getIntent().getExtras(); String message = b.getString("key", ""); // the blank String in the second parameter is the default value of this variable. In case the value from previous activity fails to be obtained, the app won't crash: instead, it'll go with the default value of an empty string 

现在把这个元素放在一个TextView或者EditText中,或者你使用setText()函数的任何布局元素。

两个案例

当我们讨论在活动之间传递数据时,有两种可能的情况。
假设有两个活动A和B,还有一个stringX,并且你在活动A中

现在两种情况
1)A-> B
2)A <-B

情况1):stringX在A中,并且您想要在活动B中获取它。

这是非常简单的。

在活动A.
1)创build意图
2)把额外的价值
3)startActivity

 Intent i = new Intent(A.this, B.class); i.putExtra("Your_KEY",X); startActivity(i) 

在活动B中
里面onCreate方法检索stringX使用您在存储X(Your_KEY)时使用的密钥。

 Intent i = getIntent(); String s = i.getStringExtra("Your_KEY"); 

情况2)
这个案例是有点棘手,如果你是在android开发新的。
因为您正处于活动A中,您将移至活动B,收集string,移回活动A并将所收集的string或数据退回。 让我们看看如何处理这种情况。

在活动A
1)创build意图
2)用请求码开始活动。

 Intent i = new Intent(A.this, B.class); startActivityForResult(i,your_req_code); 

在活动B中
1)将stringX置于意图
2)设置结果
3)完成活动

 Intent returnIntent = new Intent(); returnIntent .putString("KEY",X); setResult(resCode,returnIntent); // you could set Activity.RESULT_OK or your rescode too finish() 

再次在活动A
1)覆盖onActivityResult方法

 onActicvityResult(int req_code, int res_code, Intent data) { if(req_code==your_req_code) { String X = data.getStringExtra("KEY") } } 

进一步了解案例2

你可能想知道什么是reqCode,在startActivityForResult(int reqCode, resCode, Intent data)
当你必须确定从哪个活动获得结果时, reqCode非常有用。
比方说,你有两个button,一个button启动相机(你点击一张照片,并获得在您的活动中的图像的位图作为结果),另一个button启动谷歌地图(你回到你的位置的当前坐标结果)。 因此,要区分这两种活动的结果,请使用不同的请求代码启动CameraActivty和MapActivity。
resCode :在必须区分结果如何返回到请求活动时非常有用。
例如:您启动相机活动。 当照相机活动开始时,您可以拍摄照片,或者只需按下后退button即可退回到请求活动,而无需拍摄照片。 所以在这两种情况下,您的Cameraactivity会分别使用不同的resCode ACTIVITY.RESULT_OK和ACTIVITY.RESULT_CANCEL发送结果。
相关链接
详细了解获取结果