Example on transferring variable values between android activities - java

I have 2 variables in lets say class "first" and I want these values in class "second" to do some task.
What could be the simplest way.
As I am working on android development the 2 variables values are edittext values entered by the user

Either you can put them in second class's constructor or make them public static so that using class name you can access them..

Using Static it will be shared by all threads. Better to make private and provide the getter and setter method, hence you can access the value by getter method.

In the first class, you can do something like this,
name_text = (EditText) findViewById(R.id.nameText);
String name = name_text.getText().toString();
Intent intent = new Intent(first.this, Second.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("name",name);
startActivity(intent);
and in the Second class, you can do something like this,
Intent i = this.getIntent();
String name = i.getStringExtra("name");

If you mean first and Second are Activities then you can user putExtra concept.
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("var1", editText1.getText().toString());
intent.putExtra("var2", editText2.getText().toString());
startActivity(intent);
SecondActivity.java
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
String txtOne = bundle.getString("var1");
String txtTwo = bundle.getString("var2");
}

As you are using Intent to navigate from Activity1 to Activity2, make use of Intent.putExtra("key", "Value")

Related

Check checkbox from antoher activity

I was wondering if anyone could tell me how I could check a checkBox in an activity from another activity.
I'm making a homework app and I want to put a check next to the questions that have been completed.
So the first activity has a list of questions and next to them are unchecked boxes. When you click a question, the app takes you to the second activity. In the second activity, I want to check the box of the question that was completed.
You should use SharedPreferences for that. call this in the first activity:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.putBoolean("KEY", <your value>).apply();
and something similar in another activity:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean isTicked = prefs.getBoolean("KEY", <default boolean value>);
where KEY can be anything, for example, your question's number
You should use intent and bundle logic for passing data between activities.(in most cases)
In the first activity, whenever you are creating the second activity, you pass your data.
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("checked",checkBox.isChecked());
startActivity(intent);
In the second activity you receive your data by using :
Intent receivedIntent = getIntent();
boolean finalChecked = receivedIntent.getExtras().getBoolean("checked");
//now you can apply your logic with finalChecked variable
You can save checked check question to a bundle and pass it as extra to your second activity through intent and read it from that intent inside your second activity
In your first activity do something like this
public class FirstActivity extends Activity {
public static final String EXTRA_CHECKED_QUESTION = "Checked Question";
// other codes here
private void startSecondActivity() {
String checkedQuestion = getCheckedQuestion(); // a method to get checked question
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(FirstActivity.EXTRA_CHECKED_QUESTION, checkedQuestion);
startActivity(intent);
}
}
then in your second activity
public class SecondActivity extends Activity {
#Override
protected void onCreate(Bundle savedInstance) {
// other codes
String checkedQuestion = getIntent().getStringExtra(FirstActivity.EXTRA_CHECKED_QUESTION);
// do whatever you want with checkQuestion
}
}
Please note that the string which you pass as first parameter to putExtra() method in FirstActivity, should be same as the string you are using with getStringExtra() to retrieve your extra in SecondActivity, otherwise you can not retrieve your passed extra in SecondActivity.
Also, I did not write these codes inside idea, so there might be syntax error
Read more about intent here

How do you pass a value of a AutocompleteTextview to a string value in another Class or layout? [duplicate]

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?
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);
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.
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
A-------->B
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
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);
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");
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.
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
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.
For those people who use Kotlin do this instead:
Create a method with a parameter containing String Object.
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~
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

Android: Send Extras (ArrayList) to any Activity

I have 3 activities, First Activity(Main), Middle Activity, and Final Activity. Currently, I'm sending Serializable Arraylists via Intent. Which works great when I create an intent to start Final Activity from within First Activity, although it skips over Middle Activity which needs to be displayed. The problem I'm running into is that all of the data originates in First Activity, and I can't seem to send it from First Activity, to Final Activity, and still display Middle Activity. I'm wondering if I should try to send the Arraylists via SharedPreferences instead?
List<String> proStrings = new ArrayList<>();
#Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.SendButton:
Intent intent = new Intent(FirstActivity.this, MiddleActivity.class);
intent.putExtra("proGolferArray", String.valueOf(i));
//CREATE BUNDLE AND ADD ARRAYLIST AS SERIALIZABLE
Bundle bundle = new Bundle();
bundle.putSerializable("PROGOLFER", (Serializable) proStrings);
//START NEW INTENT WITH ARRAYLIST BUNDLE PASSED IN
intentFinal = new Intent(this, FinalActivity.class);
intentFinal.putExtra("KEY", bundle);
startActivity(intent);
//startActivity(intentFinal);
//this doesn't look right, I must be doing this wrong....
break;
}
}
}
From MiddleActivity, I start the FinalActivity, but when I do, the data from the ArrayList in First Activity doesn't appear in FinalActivity at all. Is there a way to start 'finalIntent' from Middle Activity so that the data is sent to FinalActivity properly?
If you are trying to display MiddleActivity and then FinalActivity, try the following?
Launch MiddleActivity from FirstActivity along with the arraylist
Get the arraylist in onCreate() of MiddleActivity
Start FinalActivity from MiddleActivity along with the arraylist retrieved in step 2
And by the way the code you posted in the question is wrong. You should attach the bundle to intent and not finalintent

Using putExtra in intent to display specific layout in new activity

i am curious how i go about using the
putExtra("something", something);
in a intent to a new activity inside my application,
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.putExtra("something", something)
startActivity(i);
I need to know how i would the sending and receiving end would look like, For Loading a specific layout file depending on what was sent via the putExtra in the intent.
So if i send the i.putExtra("a", a) on the receiving end, it would create a content view with R.layout.a_layout.xml
but if i sent i.putExtra("b", b) it would load R.layout.b_layout.xml
Any ideas?
One nifty way of doing this would be to say:
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.putExtra("layout", R.layout.a_layout.xml);
to send the correct layout to your new class. Then in the new class, you can use:
int layout = getIntent().getIntExtra("layout", R.layout.default_layout);
setContentView(layout);
Send the int representing your layout:
i.putExtra("layout_id", R.layout.my_layout1);
and load it
setContentView(getIntent().getIntExtra("layout_id", R.layout.default_layout);
A value such as R.layout.a_layout is just an int. So, just use putExtra("Key", R.layout.a_layout);.
Then, on your receiving activity, just pass that same int to setContentView(), like:
public void onCreate(Bundle savedInstanceState)
{
int layout = getIntent().getIntExtra("Key", -1);
if (layout != -1)
setContentView(layout);
}

How to pass values to parent tabgroupactivity?

I have one tabGroupActivity. in this tabGroupActivity I start a new activity called "pideInformacion", in this way:
Intent intent = new Intent(getParent(), pideInformacion.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("pideInformacion", intent);
Then, from pideInformacion class the app open a new activity called verMapaGps:
Intent intent = new Intent(this, verMapaGps.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("verMapaGps", intent);
I would like that in verMapaGps set string value in order to return to pideInformacion class.
I see this way to access to parent activity, but I don't know how can I access to parent activity values to set it.
Activity pideInfoActivity = (pideInformacion) getParent();
I can't be able to use startActivityForResult because If I use this method, the tabhost hides and I want to tabbar is show in whole application.
Thanks in advance!
Try to make the string as a static variable and use it in the parent activity.

Categories