简体   繁体   中英

Making userInput from main activity to display on second activity in Android

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:

startActivityForResult() - Documentation

**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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM