如何将字符串从一个活动发送到另一个活动?

时间:2013-08-09 12:24:47

标签: android android-activity

所以我在activity2中有一个字符串

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

我想将此字符串插入activity1中的文本字段。我怎样才能做到这一点? 提前谢谢。

10 个答案:

答案 0 :(得分:84)

您可以使用意图,即在活动之间发送的消息。在intent中,您可以放置​​所有类型的数据,String,int等。

在您的情况下,在activity2中,在转到activity1之前,您将以这种方式存储字符串消息:

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

activity1 onCreate()中,您可以通过检索String(其中包含调用活动发送的所有消息)来获取Bundle消息,并致电{ {1}}:

getString()

然后您可以在Bundle bundle = getIntent().getExtras(); String message = bundle.getString("message");

中设置文字
TextView

希望这有帮助!

答案 1 :(得分:13)

您可以使用Intent

将数据从一个活动发送到另一个活动
Intent sendStuff = new Intent(this, TargetActivity.class);
sendStuff.putExtra(key, stringvalue);
startActivity(sendStuff);

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

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

然后你要做的就是在TextView上调用setText并使用该字符串。

答案 2 :(得分:4)

假设你的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);

现在在Second Activity中,说你想把从EditText et1传递的字符串放到SecondActivity的TextView txt1

Bundle gt=getIntent().getExtras();
str=gt.getString("abc");
txt1.setText(str);

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

两个案例

当我们讨论在活动之间传递数据时,有两种情况可能。

假设有两个活动A和B,并且有一个字符串X. 你在活动A

现在有两个案例

1)A-> B
2)A< -B

  

CASE 1):字符串X在A中,您希望在活动B中获取它。

非常简单。

在活动A中。

1)创建意图
2)放额外值
3)startActivity

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

在活动B中

在onCreate方法内部使用您在存储X(Your_KEY)时使用的密钥检索字符串X.

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

案例2)
    如果你是android的新手,这个案子有点棘手   发展。
  因为您在活动A中,所以转到活动B,   收集字符串,移回活动A并检索   收集字符串或数据。让我们看看如何处理这种情况。

在活动A中
1)创建意图
2)使用请求代码启动活动。

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

在活动B中
1)将字符串X置于意图中 2)设定结果
3)完成活动

Intent returnIntent = new Intent();
returnIntent .putString("KEY",X);
setResult(resCode,returnIntent);   // for the first argument, you could set Activity.RESULT_OK or your custom 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

您可能想知道onActicvityResult(int reqCode, resCode, Intent data)

中的reqCode,resCode是什么

reqCode 在您必须从哪个活动中识别出结果时非常有用。

假设您有两个按钮,一个按钮启动摄像头(您单击一张照片并在活动中获取该图像的位图),另一个按钮启动GoogleMap(您将当前的位置坐标恢复为结果)。因此,为了区分这两个活动的结果,您可以使用不同的请求代码启动CameraActivty和MapActivity。

resCode :当您必须区分 结果返回请求活动时非常有用。

例如:您启动相机活动。当相机活动开始时,您可以拍摄照片,或者只需返回请求活动而无需按后退按钮拍照。因此,在这两种情况下,您的相机活动会分别使用不同的resCode ACTIVITY.RESULT_OK和ACTIVITY.RESULT_CANCEL发送结果。

相关链接

Read more on Getting result

答案 5 :(得分:0)

Intents are intense

Intent对于在android框架周围传递数据非常有用。您可以与自己的Activities甚至其他流程进行通信。查看开发者指南,如果您有特定问题(预先消化很多),请回来。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

要将 activity2 中的文本插入 activity1 ,首先需要在 activity2中创建访问功能

master

创建此功能后,您需要从 activity2 onCreate()函数中调用它:

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

接下来,转到 activity1 Java文件。在 onCreate()函数中,创建一个 Bundle 对象,通过该对象通过其键获取前面的消息,并将其存储在String中。

visitactivity1();

现在使用 setText()函数将此元素放在TextView或EditText中,或者您喜欢的任何布局元素。

答案 8 :(得分:0)

对于那些使用 Kotlin 的人,请改为这样做:

  1. 使用包含String 对象的参数创建一个方法。
  2. 导航到另一个活动

例如


// * The Method I Mentioned Above 
private fun parseTheValue(@NonNull valueYouWantToParse: String)
{
     val intent = Intent(this, AnotherActivity::class.java)
     intent.putExtra("value", valueYouWantToParse)
     intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
     startActivity(intent)
     this.finish()
}

然后只需调用 parseTheValue("the String that you want to parse")

例如

val theValue: String
 parseTheValue(theValue)

然后在另一个活动中,

val value: Bundle = intent.extras!!
// * enter the `name` from the `@param`
val str: String = value.getString("value").toString()

// * For testing
println(str)

希望对您有所帮助,编码愉快!

~John Melody 添加的 Kotlin 代码~

答案 9 :(得分:0)

所以我正在这样做,但我的输出很奇怪, 这是第一个活动

        up = findViewById(R.id.button);
        up.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, updatestudents.class);
                intent.putExtra("updating",updating);
                startActivity(intent);
            }
        });

这是第二个活动

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            Current_Value = getIntent().getStringExtra("updating");
        }
        u = findViewById(R.id.text);
        u.setText("updating " + Current_Value);

这里我在第二个活动中检索字符串

这是我的输出 enter image description here