I've seen a few related topics on here but after many attempts I just couldn't seem to find the solution so hopefully someone out there can help. Here's my code so far (Trying to make userInput appear on the 2nd activity as the result) :
MainActivity.java
package winfield.joe.wind.v1;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
public class MainActivity extends Activity {
// public var
private EditText text;
// default func
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "onCreate!", Toast.LENGTH_LONG).show();
setContentView(R.layout.activity_main);
// findViewById = Finds a view that was identified by the id attribute
// from the XML that was processed in onCreate(Bundle).
// (EditText) = typecast
text = (EditText) findViewById(R.id.userInput);
}
//Will be executed by clicking on the calculate button because we assigned "calc" to the "onClick" Property
public void calc(View view) {
RadioButton toKilometers = (RadioButton) findViewById(R.id.toKilometers);
RadioButton toKnots = (RadioButton) findViewById(R.id.toKnots);
if (text.getText().length() == 0) {
// if the text field is empty show the message "enter a valid number" via toast message
Toast.makeText(this, "enter a valid number", Toast.LENGTH_LONG).show();
} else {
int userInput = R.string.userInput;
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra("userInput", userInput);
startActivityForResult(i, 0);
startActivity(i);
// parse input Value from Text Field
double inputValue = Double.parseDouble(text.getText().toString());
// convert to...
if (toKilometers.isChecked()) {
text.setText(String.valueOf(convertToKM(inputValue)));
// uncheck "to km" Button
toKilometers.setChecked(false);
// check "to knots" Button
toKnots.setChecked(true);
} else { /* if toKnots button isChecked() */
text.setText(String.valueOf(convertToKnots(inputValue)));
// uncheck "to knots" Button
toKnots.setChecked(false);
// check "to km" Button
toKilometers.setChecked(true);
}
}
}
/*private void putExtra(String string, int result) {
// TODO Auto-generated method stub
}*/
private double convertToKM(double inputValue) {
// convert knots to km
return (inputValue * 1.8);
}
private double convertToKnots(double inputValue) {
// convert km to knots
return (inputValue * 0.539956803);
}
}
SecondActivity.java
package winfield.joe.wind.v1;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toast.makeText(this, "onCreate!", Toast.LENGTH_LONG).show();
setContentView(R.layout.activity_main);
Intent i = getIntent();
String userInput = i.getStringExtra("userInput");
}
//onClick GoBack method assigned to the Go Back? button which returns the user to main activity from the second activity
public void GoBack(View view) {
//AlertDialog appears upon the onclick of the go back button
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Are you sure?");
// set dialog message
builder .setCancelable(false)
.setPositiveButton("Convert Again",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
//You return to Main Activity
Intent intent = new Intent(SecondActivity.this, MainActivity.class);
startActivity(intent);
}
})
.setNeutralButton("Back to Home",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
//You return to the home page
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
})
.setNegativeButton("View Results",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close the dialog box and do nothing
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:background="@color/bgColor"
android:orientation="vertical">
<!--TITLE-->
<TextView
android:id="@+id/titleMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="22dp"
android:gravity="center"
android:text="@string/titleMain"
android:textColor="@color/textColor"
android:textColorHint="@color/textColor"
android:textColorLink="#ffffff"
android:textSize="30sp" />
<!--USER-INPUT-->
<EditText
android:id="@+id/userInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:ems="10"
android:hint="@+string/userInput"
android:inputType="numberDecimal"
android:paddingEnd="40dp"
android:paddingStart="20dp"
android:paddingTop="30dp" >
<requestFocus />
</EditText>
<!--TWO RADIO BUTTONS-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<!--toKNOTS-->
<RadioButton
android:id="@+id/toKnots"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_weight="0.04"
android:checked="true"
android:text="@string/toKnots" />
<!--toKM-->
<RadioButton
android:id="@+id/toKilometers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="20dp"
android:layout_marginTop="10dp"
android:text="@string/toKilometers" />
</LinearLayout>
<!--CALCULATE-->
<Button
android:id="@+id/calc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="30dp"
android:onClick="calc"
android:text="@string/calc" />
</LinearLayout>
activity_second.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:background="@color/bgColor"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<!-- TITLE -->
<TextView
android:id="@+id/titleResults"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="24dp"
android:gravity="center"
android:text="@string/titleResults"
android:textColor="@color/textColor"
android:textColorHint="@color/textColor"
android:textColorLink="#ffffff"
android:textSize="25sp" />
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dp"
android:layout_marginTop="30dp"
android:ems="10"
android:hint="@string/result"
android:textColorHint="@color/textColor" >
<requestFocus />
</TextView>
<Button
android:id="@+id/GoBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:text="@string/GoBack"
android:onClick="GoBack" />
</LinearLayout>
Change this...
int userInput = R.string.userInput;
...to...
String userInput = text.getText().toString();
Everything in the R.java
file is a static final int
which is used to reference a resource - it isn't actually the resource itself (or the contents of the resource in the case of an EditText
for example).
I see two problems in your code.
First you are setting userInput to R.string.userInput which is kind of strange imo. You should set userInput to the text from the TextField:
String userInput = text.getText().toString();
The second problem I notice is that you start the second intent twice. Once for result and once without:
startActivityForResult(i, 0);
startActivity();
Try to remove the startActivityForResult if you do not want to work with the result from the last activity. You probably misunderstood was startActivityForResult(i, 0) does.
You basically call startActivityForResult() if you want to get the result back from the activity. For example you are in your MainActivity and want to display a photo in there. Now you can start the camera intent with startActivityForResult() and after the photo is taken you can process this in your MainActivity.
If you just want to pass the value to the next activity a simple startActivity() is enough. Here is the link to the docs if you want to read more about this topic:
**This is the correct way to change information between 2 activity, of corse be careful to activity lifecycle. This code best practice!**
First activity
public class MainActivity extends Activity {
private static final String Tag = "ACTIVITY";
private static final String CONTATORE = "contatore";
TextView et;
Button btn,btnLancia;
int counter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (TextView) findViewById(R.id.et);
btn = (Button) findViewById(R.id.btn);
btnLancia = (Button) findViewById(R.id.btnLancia);
if(savedInstanceState != null){
counter = savedInstanceState.getInt(CONTATORE);
}
btnLancia.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lanciaActivity();
}
});
et.setText("" + counter);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
++counter;
et.setText("" + counter);
}
});
Log.d(Tag, "OnCreate");
}
protected void lanciaActivity() {
Intent intent = new Intent(this,Activity2.class);
Bundle bundle = new Bundle();
bundle.putInt(Activity2.VALUE, counter);
intent.putExtras(bundle);
startActivity(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(Tag, "OnDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d(Tag, "OnPause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d(Tag, "OnRestart");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.d(Tag, "onRestoreInstanceState");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d(Tag, "OnResume");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.d(Tag, "OnSaveIstantState");
outState.putInt(CONTATORE, counter);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d(Tag, "OnStart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d(Tag, "OnStop");
}
}
SECONd ACTIVITY
public class Activity2 extends Activity {
private static final String Tag = "ACTIVITY2";
public static final String VALUE = "value";
private static final String VALOREATT = "val";
TextView contatore;
Button button;
int contatoreq;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity2);
Log.d(Tag, "OnCreate");
contatore = (TextView) findViewById(R.id.textView1);
button = (Button) findViewById(R.id.btnDoppio);
if(savedInstanceState!=null){
contatoreq = savedInstanceState.getInt(VALOREATT);
}
else {
Intent intetn = getIntent();
Bundle bundle = intetn.getExtras();
if(bundle!=null)
contatoreq = bundle.getInt(VALUE);
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
contatoreq = contatoreq*2;
contatore.setText("" + contatoreq);
}
});
contatore.setText("" + contatoreq);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(Tag, "OnDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d(Tag, "OnPause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d(Tag, "OnRestart");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.d(Tag, "onRestoreInstanceState");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d(Tag, "OnResume");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.d(Tag, "OnSaveIstantState");
outState.putInt(VALOREATT, contatoreq);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d(Tag, "OnStart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d(Tag, "OnStop");
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.