无法将值传递给第二个布局

时间:2019-06-04 07:14:42

标签: java android

我正在尝试开发我的第一个Android应用程序。理论上很简单:用户输入2个值,应用程序进行一些计算,然后在第二个布局中返回一些结果。

这是我的MainActivity。

package domain.com.myapp;

import ...

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                doCalculations();
            }
        });
    }

    void doCalculations() {
        Log.i("info", "In doCalculations");

        // get inputs
        final EditText editSPrice = (EditText) findViewById(R.id.editText2);
        final EditText editPPrice = (EditText) findViewById(R.id.editText3);

        // do calculations

        float salePrice = Float.valueOf(editSPrice.getText().toString());
        float purchPrice = Float.valueOf(editPPrice.getText().toString());

        // set outputs ** this is where I'm stuck!! **
        textView9.setText(String.format("%.2f", salePrice));
        textView10.setText(String.format("%.2f", purchPrice));

        setContentView(R.layout.the_quote);

    }
}

问题在于textView9和textView10不在范围内(在第二种布局the_quote中),我不确定要更改什么。

4 个答案:

答案 0 :(得分:2)

在您当前的活动中,创建一个新的Intent:

String value="Hello world";
Intent i = new Intent(CurrentActivity.this, NewActivity.class);    
i.putExtra("key",value);
startActivity(i);

然后在新的活动中,检索这些值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("key");

}

这是在“活动”之间传递值的方法

答案 1 :(得分:1)

It's Simple use intent to pass value from layout to another

On the sender side, use

Intent myIntent = new Intent(A.this, B.class);
myIntent.putExtra("intVariableName", intValue);
startActivity(myIntent);

On the receiver side, use

Intent mIntent = getIntent();
int intValue = mIntent.getFloatExtra("intVariableName");

答案 2 :(得分:1)

在Android中将值传递给第二个activity,您可以简单地使用putExtra方法。

在您的第一个活动中添加:

Intent i = new Intent(getApplicationContext(), Activity.class);
i.putExtra("name", value);
startActivity(I);

在第二个活动中得到它:

String s = getIntent().getStringExtra("name");

答案 3 :(得分:1)

如果要使用setContentView(...)更改布局,则需要再次在其中初始化视图。

我会推荐Jimale Abdi's solution

但是您现在也可以尝试以下解决方案,

   void doCalculations() {
        Log.i("info", "In doCalculations");

        // get inputs
        final EditText editSPrice = (EditText) findViewById(R.id.editText2);
        final EditText editPPrice = (EditText) findViewById(R.id.editText3);

        // do calculations

        float salePrice = Float.valueOf(editSPrice.getText().toString());
        float purchPrice = Float.valueOf(editPPrice.getText().toString());

        Intent i = new Intent(CurrentActivity.this, NewActivity.class);    
        i.putExtra("salePrice",salePrice);
        i.putExtra("purchPrice",purchPrice);
        startActivity(i);

        //setContentView(R.layout.the_quote);

        // Find your view again from updated layout...
        //final TextView textView9 = (TextView) findViewById(R.id.textView9);
        //final TextView textView10 = (TextView) findViewById(R.id.textView10);

        //textView9.setText(String.format("%.2f", salePrice));
        //textView10.setText(String.format("%.2f", purchPrice));

   }

然后在第二个活动中按如下所示在onCreate方法中检索

        final TextView textView9 = (TextView) findViewById(R.id.textView9);
        final TextView textView10 = (TextView) findViewById(R.id.textView10);

        Bundle extras = getIntent().getExtras();

        if (extras != null) {
          Float salePrice = extras.getFloat("salePrice");
          Float purchPrice = extras.getFloat("purchPrice");

          textView9.setText(String.format("%.2f", salePrice));
          textView10.setText(String.format("%.2f", purchPrice));
        }