36

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?

vvvvv
  • 25,404
  • 19
  • 49
  • 81
Luch Filip
  • 1,103
  • 3
  • 13
  • 13
  • 1
    u can use intent or shared pref – KOTIOS Aug 09 '13 at 12:28
  • How are you starting activity2? You can probably use an intent to pass the string back. – jongusmoe Aug 09 '13 at 12:28
  • 1
    You should not use shared preferences for sending data between activities. Sure it can work but preferences is better suited for persistantly storing data that needs to be accessed throughout the application - e.g. user information for login so that it does not have to be entered each time. If you want to transfer data that will not be stored persistantly you should use an intent. Otheriwse its just bad form. – Rarw Aug 09 '13 at 12:35
  • duplicate of http://stackoverflow.com/questions/6707900/how-to-pass-string-one-activity-to-another . Use intent to pass dont use shared preference, it is not recommended to use shared preference to pass the data between two activities. – Rahul Patil Aug 09 '13 at 12:43

11 Answers11

106

You can use intents, which are messages sent between activities. In a intent you can put all sort of data, String, int, etc.

In your case, in activity2, before going to activity1, you will store a String message this way :

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

In activity1, in onCreate(), you can get the String message by retrieving a Bundle (which contains all the messages sent by the calling activity) and call getString() on it :

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

Then you can set the text in the TextView:

TextView txtView = (TextView) findViewById(R.id.your_resource_textview);    
txtView.setText(message);
starball
  • 20,030
  • 7
  • 43
  • 238
jbihan
  • 3,053
  • 2
  • 24
  • 34
  • thank you. i have to create `private TextView editText1` right? – Luch Filip Aug 09 '13 at 12:44
  • 1
    Answer is bit confusing , to a newbie . Explain it properly so that , it can be made out easily. – Rahul Patil Aug 09 '13 at 12:46
  • Yes (though you should not call editText a variable that is a TextView). Then don't forget, before the setText, to do editText1 = (TextView) findViewById(R.id.resource_of_your_textview); – jbihan Aug 09 '13 at 12:46
  • You're right @Rahul Patil, I edited my answer I hope it's better! Thanks! – jbihan Aug 09 '13 at 12:57
  • 1
    2 things to clarify (1) an `Intent` does not "store a string," it passes that string (or any data you pass to it) to the next activity (2) you do not need to get the entire `Bundle` to get the values passed via intent. You can access them directly. – Rarw Aug 09 '13 at 15:22
16

You can send data from one actvity to another with an Intent

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

You then can retrieve this information in the second activity by getting the intent and extracting the string extra. Do this in your onCreate() method.

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

Then all you have to do is call setText on your TextView and use that string.

Rarw
  • 7,645
  • 3
  • 28
  • 46
7

TWO CASES

There are two situations possible when we talk about passing data between activities.

Let's say there are two activities A and B and there is a String X. and you are in Activity A.

Now let's see the two cases

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

CASE 1:
String X is in A and you want to get it in Activity B.

It is very straightforward.

In Activity A.

1) Create Intent
2) Put Extra value
3) startActivity

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

In Activity B

Inside onCreate() method retrieve string X using the key which you used while storing X (Your_KEY).

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

Case 2:
This case is little tricky if u are new to Android development Because you are in Activity A, you move to Activity B, collect the string, move back to Activity A and retrieve the collected String or data. Let's see how to deal with this situation.

In Activity A
1) Create Intent
2) start an activity with a request code.

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

In Activity B
1) Put string X in intent
2) Set result
3) Finish activity

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();

Again in Activity A
1) Override onActivityResult method

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

Further understanding of Case 2

You might wonder what is the reqCode, resCode in the onActivityResult(int reqCode, resCode, Intent data)

reqCode is useful when you have to identify from which activity you are getting the result from.

Let's say you have two buttons, one button starts Camera (you click a photo and get the bitmap of that image in your Activity as a result), another button starts GoogleMap( you get back the current coordinates of your location as a result). So to distinguish between the results of both activities you start CameraActivty and MapActivity with different request codes.

resCode: is useful when you have to distinguish between how results are coming back to requesting activity.

For eg: You start Camera Activity. When the camera activity starts, you could either take a photo or just move back to requesting activity without taking a photo with the back button press. So in these two situations, your camera activity sends result with different resCode ACTIVITY.RESULT_OK and ACTIVITY.RESULT_CANCEL respectively.

Relevant Links

Read more on Getting result

Westy92
  • 19,087
  • 4
  • 72
  • 54
Rohit Singh
  • 16,950
  • 7
  • 90
  • 88
4

Say there is EditText et1 in ur MainActivity and u wanna pass this to 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);

now in Second Activity, say u wanna put the string passed from EditText et1 to TextView txt1 of SecondActivity

Bundle gt=getIntent().getExtras();
str=gt.getString("abc");
txt1.setText(str);
Aditya Harsh
  • 399
  • 2
  • 7
  • the problem is that in the main activity i have a button, it leads to `current location on google maps`, then i show the user the current location, and he clicks a button `send location`, and send the latLong to main activity to a text view. the problem is that my app crashes on main activity, i suppose that this happens because i try to get a string that does not yet exist, so i need to check somehow if there is anything. i did with if, and it didnt work. – Luch Filip Aug 09 '13 at 15:12
3
 Intent intent = new Intent(activity1.this, activity2.class);
 intent.putExtra("message", message);
 startActivity(intent);

In activity2, in onCreate(), you can get the String message by retrieving a Bundle (which contains all the messages sent by the calling activity) and call getString() on it :

  Bundle bundle = getIntent().getExtras();
  String message = bundle.getString("message");
Sudhir Singh
  • 817
  • 11
  • 16
0

Intents are intense.

Intents are useful for passing data around the android framework. You can communicate with your own Activities and even other processes. Check the developer guide and if you have specific questions (it's a lot to digest up front) come back.

Collin Flynn
  • 751
  • 6
  • 8
0

You can use the GNLauncher, which is part of a utility library I wrote in cases where a lot of interaction with the Activity is required. With the library, it is almost as simple as calling a function on the Activity object with the required parameters. https://github.com/noxiouswinter/gnlib_android/wiki#gnlauncher

jinais
  • 33
  • 1
  • 5
0

In order to insert the text from activity2 to activity1, you first need to create a visit function in activity2.

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

After creating this function, you need to call it from your onCreate() function of activity2:

visitactivity1();

Next, go on to the activity1 Java file. In its onCreate() function, create a Bundle object, fetch the earlier message via its key through this object, and store it in a 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

Now put this element in a TextView or EditText, or whichever layout element you prefer using the setText() function.

Rafi
  • 19
  • 3
0

For those people who use Kotlin do this instead:

  1. Create a method with a parameter containing String Object.
  2. Navigate to another Activity

For Example,


// * 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()
}

Then just call parseTheValue("the String that you want to parse")

e.g,

val theValue: String
 parseTheValue(theValue)

then in the other activity,

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

// * For testing
println(str)

Hope This Help, Happy Coding!

~ Kotlin Code Added By John Melody~

钟智强
  • 459
  • 6
  • 17
0

So I was doing this but my output is weird , this is the 1st activity

        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);
            }
        });

this is the 2nd activity

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

Here I am retrieving String in 2nd Activity

And this is my output enter image description here

0

Change an item in build.gradle(:app) and press sync now.

Ali Najaphi
  • 151
  • 2
  • 8