35

I have a string in activity2

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

I want to insert this string into text field in activity1. How can I do that?

4

10 回答 10

104

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

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

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

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

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

然后你可以设置文本TextView

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

希望这可以帮助 !

于 2013-08-09T12:31:49.377 回答
15

您可以将数据从一个活动发送到另一个活动Intent

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

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

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

然后你所要做的就是调用你的 setTextTextView并使用那个字符串。

于 2013-08-09T12:28:14.393 回答
7

两个案例

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

假设有两个活动 A 和 B 并且有一个字符串 X。并且您在 Activity A 中

现在让我们看看这两种情况

  1. A-------->B
  2. A<--------B

案例 1:
字符串 X 在 A 中,您想在活动 B 中获取它。

这非常简单。

在活动 A。

1) 创建 Intent
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 开发的新手,这个案例有点棘手 因为您在 Activity A 中,所以您移动到 ​​Activity B,收集字符串,返回到 Activity 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 方法

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

进一步了解案例2

你可能想知道什么是 reqCode、resCode 中的onActivityResult(int reqCode, resCode, Intent data)

当您必须确定从哪个活动中获取结果 时, reqCode很有用。

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

resCode:当您必须区分结果如何返回到请求活动时很有用。

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

相关链接

阅读有关获取结果的更多信息

于 2017-12-22T05:49:10.497 回答
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);

现在在第二个活动中,说你想把从 EditText et1 传递的字符串放到 SecondActivity 的 TextView txt1

Bundle gt=getIntent().getExtras();
str=gt.getString("abc");
txt1.setText(str);
于 2013-08-09T15:07:48.093 回答
3
 Intent intent = new Intent(activity1.this, activity2.class);
 intent.putExtra("message", message);
 startActivity(intent);

在activity2中,在onCreate()中,你可以通过检索一个Bundle(它包含调用activity发送的所有消息)来获取String消息,然后在它上面调用getString():

  Bundle bundle = getIntent().getExtras();
  String message = bundle.getString("message");
于 2017-11-17T07:14:59.250 回答
0

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

于 2014-11-03T00:36:31.133 回答
0

意图很强烈

Intents 对于在 android 框架中传递数据很有用。您可以与自己的Activities甚至其他进程进行通信。查看开发人员指南,如果您有具体问题(前面需要消化很多),请回来。

于 2013-08-09T12:31:01.400 回答
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);

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

这是我的输出 在此处输入图像描述

于 2021-06-05T07:07:19.817 回答
0

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

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

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

visitactivity1();

接下来,转到activity1 Java 文件。在它的onCreate()函数中,创建一个Bundle对象,通过它的 key 通过这个对象获取较早的消息,并将其存储在一个 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()函数您喜欢的任何布局元素。

于 2016-07-25T10:19:23.070 回答
0

对于那些使用Kotlin这样做的人:

  1. 使用包含String Object的参数创建一个方法。
  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 代码~

于 2021-02-25T06:36:10.203 回答