使主要活动的用户输入显示在Android中的第二个活动

时间:2015-03-12 09:40:54

标签: java android android-intent

我在这里看到了一些相关的主题,但经过多次尝试,我似乎无法找到解决方案,所以希望有人可以提供帮助。这是我到目前为止的代码(试图让userInput出现在第二个活动上作为结果)

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>

3 个答案:

答案 0 :(得分:0)

改变这个......

int userInput = R.string.userInput;

...到...

String userInput = text.getText().toString();

R.java文件中的所有内容都是static final int,用于引用资源 - 它实际上并不是资源本身(或者是{{1}的资源内容例如{1}}。

答案 1 :(得分:0)

我在你的代码中看到了两个问题。

首先,您将userInput设置为R.string.userInput,这是一种奇怪的imo。您应该将userInput设置为TextField中的文本:

String userInput = text.getText().toString();

我注意到的第二个问题是你开始第二次意图两次。一次结果,一次没有:

startActivityForResult(i, 0);
startActivity();

如果您不想使用上一个活动的结果,请尝试删除startActivityForResult。你可能误解的是startActivityForResult(i,0)。

如果要从活动中获取结果,则基本上调用startActivityForResult()。例如,您在MainActivity中并希望在其中显示照片。现在,您可以使用startActivityForResult()启动相机意图,拍摄完照片后,您可以在MainActivity中处理它。

如果您只想将值传递给下一个活动,那么简单的startActivity()就足够了。如果您想要阅读有关此主题的更多信息,请参阅文档的链接:

startActivityForResult() - Documentation

答案 2 :(得分:0)

**This is the correct way to change information between 2 activity, of corse be careful to activity lifecycle. This code best practice!**

第一项活动

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

}