i carried some edittext string data from a second activity to the first and placed the string data into textviews in the first activity.
this worked fine.
when i go from the first activity back to the second activity (done using the options menu), i want to carry the previously entered edittext data back into the edit texts in the second activity. i cant get it to carry over - the second activity edittexts go back to the original edittext settings (empty).
this is my second activity code:
public void goToMain(View view) { //run when a button is clicked
Intent intent = new Intent(setPlayersActivity.this, MainActivity.class);
intent.putExtra("P1",p1EditText.getText().toString());
startActivity(intent);
}
and in my first activity code i have in the on create:
Intent name = getIntent();
p1TextView.setText(name.getStringExtra("P1"));
to go from the first activity to the second
public boolean onOptionsItemSelected(#NonNull MenuItem item) {
if (item.getItemId() == R.id.resetAll) {
updateScoreTeamA(scoreA = 0);
} else if (item.getItemId() == R.id.setPlayers) {
Intent intent = new Intent(MainActivity.this, setPlayersActivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
up to here is working fine.
upon returning to the second activity though, the edittexts are again empty (i want to carry the previously entered data back to this activity).
to fill the edittexts with the previously entered string data, i tried the following in the on create of the second activity.
p1EditText.setText(getIntent().getStringExtra("P1"));
thanks in advance for the help. i am a beginner with programming and cannot imagine making any progress without this community.
When your changing activity you have to provide data to that certain intent. Otherwise it won't work
Intent intent = new Intent(MainActivity.this, setPlayersActivity.class);
intent.putExtra("P1","data");
startActivity(intent);
I am trying to make a skip button and it have to do what i draw.
i honestly don't know how can i make this happen.
The code actually have to skip the current activity and put it as last.
if the activity's question was answered, there is no skip.here i draw
I have tried a few things but it's beyond my powers.
Intent intent=new Intent(this, c1_2.class);
startActivity(intent);
finish();
you can use arrayList or Queue for keep your activityes, then use it to start Activity.
try this.
final ArrayList<Class> activities = new ArrayList<>();
// add your activity---------------
activities.add(c1_1.class);
activities.add(c1_2.class);
activities.add(c1_3.class);
//----------------------------
butonSkip=findViewById(R.id.skip);
butonSkip.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Class firstActivity = activities.get(0);
startActivity(new Intent(c1_1.this,activities.get(0)));
activities.remove(0);
activities.add(firstActivity);
}
});
//-----------can change activities data
// activities.set(1, c1_3.class);
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
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
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);
}