简体   繁体   English

使userInput从主要活动显示在Android的第二个活动中

[英]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) : 到目前为止,这是我的代码(试图使userInput作为结果出现在第二个活动中)

MainActivity.java 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 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 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 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). R.java文件中的所有内容都是一个static final int ,用于引用资源-它实际上不是资源本身(例如,对于EditText ,不是资源的内容)。

I see two problems in your code. 我在您的代码中看到两个问题。

First you are setting userInput to R.string.userInput which is kind of strange imo. 首先,将userInput设置为R.string.userInput,这是一种奇怪的imo。 You should set userInput to the text from the TextField: 您应该将userInput设置为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. 如果您不想使用上一个活动的结果,请尝试删除startActivityForResult。 You probably misunderstood was startActivityForResult(i, 0) does. 您可能误会了startActivityForResult(i,0)所做的事情。

You basically call startActivityForResult() if you want to get the result back from the activity. 如果您想从活动中获取结果,则基本上可以调用startActivityForResult()。 For example you are in your MainActivity and want to display a photo in there. 例如,您在MainActivity中,想要在其中显示照片。 Now you can start the camera intent with startActivityForResult() and after the photo is taken you can process this in your MainActivity. 现在,您可以使用startActivityForResult()启动相机意图,并在拍照后可以在MainActivity中进行处理。

If you just want to pass the value to the next activity a simple startActivity() is enough. 如果仅要将值传递给下一个活动,则只需一个简单的startActivity()就足够了。 Here is the link to the docs if you want to read more about this topic: 如果您想了解更多有关此主题的信息,请点击以下链接到文档:

startActivityForResult() - Documentation startActivityForResult()-文档

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

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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