来自两个活动的意图putExtra

时间:2013-08-12 12:57:35

标签: android

你好,我希望你能帮助我:

我有三项活动:Activity1 --> Activity2 --> Activity3

在Activity1和2中,我有一个Intent,它从EditText Extra。中放入一个字符串。

在Activity3中我想收到BOTH字符串,但是当我尝试Activity3时,只接收来自Activity2的Intent(上一个活动)。

这里是Activity1的代码:

public void onClick(View v) {

    Intent intent = new Intent (this, Activity2.class);
    EditText et1 = (EditText) findViewById(R.id.editText1);
    String name = et1.getText().toString();

        if (name.length() == 0) {
            new AlertDialog.Builder(this).setMessage(
                    R.string.error_name_missing).setNeutralButton(
                    R.string.error_ok,
                    null).show();
            return;
        }

        intent.putExtra(konto_name1, name);
        startActivity(intent);

    }   

来自Activity2:

public void onClick(View v) {

        Intent intent = new Intent (this, Activity3.class); 
        EditText et2 = (EditText) findViewById(R.id.editText2);

        String value = et2.getText().toString();

        if (value.length() == 0) {
            new AlertDialog.Builder(this).setMessage(
                    R.string.error_value_missing).setNeutralButton(
                    R.string.error_ok,
                    null).show();
            return;
        }

        intent.putExtra(start_value1, value);
        startActivity(intent);      
    }

3 个答案:

答案 0 :(得分:1)

像这样修改你的第二个活动代码。在第二个活动中看到您有不同的意图。它与第一次活动的意图无关。因此,您需要将第一个活动意图的值转换为第二个活动意图。

Intent intent = new Intent (this, Activity3.class);



EditText et2 = (EditText) findViewById(R.id.editText2);

String value = et2.getText().toString();

if (value.length() == 0) {
    new AlertDialog.Builder(this).setMessage(
            R.string.error_value_missing).setNeutralButton(
            R.string.error_ok,
            null).show();
    return;
}

intent.putExtra(start_value1, value);

intent.putExtra(konto_name1,getIntent().getStringExtra(konto_name1));//Add this line in your code
startActivity(intent);


}

答案 1 :(得分:1)

Acitivity2.java中获取您的第一个活动意图并再次将其传递给Activity3.java

<强> Activity1.java

 Intent intent = new Intent (this, Activity2.class);
 intent.putExtra(konto_name1, name);
 startActivity(intent);

<强> Activity2.java

  Intent intent = new Intent (this, Activity3.class);
final String firstActivityValue = getIntent().getStringExtra("name");
    intent.putExtra(start_value1, value);
    intent.putExtra(start_value2, firstActivityValue);
    startActivity(intent);

现在,您可以使用getIntent()在Activity3.java中获取这两个值。

希望它有所帮助。

答案 2 :(得分:1)

正如其他答案所讨论的那样,你可以从Intent传递给Intent。但是,您也可以使用SharedPreferences来更轻松地使用它。

SharedPreferences prefs = getDefaultSharedPreferences(this);
Editor edit = prefs.edit();
edit.putString(konto_name1, name)
edit.commit();

或者如果你想要它作为一个单行:

PreferenceManager.getDefaultSharedPreferences(this).edit().putString(konto_name1, name).commit();

然后使用:

而不是从Intent获取字符串
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String newString = prefs.getString(konto_name1, "");

那就做你想要的,而不必跟踪从Intent传递给Intent的字符串,我过去常常觉得这很烦人。

再次,上面作为一个单行:

PreferenceManager.getDefaultSharedPreferences(this).getString(konto_name1, "");

您应该对Activity2中的String执行相同的操作。不用担心,每次在活动(1/2)中单击您的项目时,首选项都将被覆盖。请注意,getString()中的第二个参数是默认字符串,以防您要检索的字符不存在。