在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递类似,也可以采用上一讲中的四种方式来传递数据,但是一般建议采用Intent对象的方式的来返回数据,使用这种方式返回数据,需要使用StartActivityForResult方法来显示Activity。
需求:如下图所示:输入 a 和 b 的值,然后点击输入计算机结果,跳转到另外Activity,输入结果,点击得出结果按钮,将得到的数值放在 第三个输入框中。使用StartActivityForResult()方式来实现。
程序Demo:
1. IntentResult.java
public class IntentResult extends Activity { private Button button; private EditText inputA, inputB, result; private final static int RESQUESTCODE = 1; private final static int RESULTCODE_TO_INTENTRESULT = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initComponent(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int a = Integer.parseInt(inputA.getText().toString()); int b = Integer.parseInt(inputB.getText().toString()); Intent intent = new Intent(IntentResult.this, Other.class); intent.putExtra("a", a); intent.putExtra("b", b); startActivityForResult(intent, RESQUESTCODE); // 如果RESQUESTCODE // >= 0,表示可以返回结果 } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); // resultCode == RESULT_OK 表示另外一个Activity已经结束了功能 if (resultCode == RESULTCODE_TO_INTENTRESULT) { if (requestCode == RESQUESTCODE) { int returnResult = data.getIntExtra("result", 0); result.setText(String.valueOf(returnResult)); } } } private void initComponent() { button = (Button) findViewById(R.id.button); inputA = (EditText) findViewById(R.id.one); inputB = (EditText) findViewById(R.id.two); result = (EditText) findViewById(R.id.three); } }
2. Other.java
public class Other extends Activity { private Button button; private TextView tx; private EditText inputResult; private final static int RESULTCODE_TO_INTENTRESULT = 2; /* * public int getIntExtra (String name, int defaultValue) defaultValue * 默认值是0,则返回键所对应的值 */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); initComponent(); Intent intent = getIntent(); int a = intent.getIntExtra("a", 0); int b = intent.getIntExtra("b", 0); tx.setText(a + " + " + b + " = ? "); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int result = Integer.parseInt(inputResult.getText().toString()); Intent intent = new Intent(); intent.putExtra("result", result); // 通过Intent对象返回结果,setResult方法 // 注意:在setResult(resultCode, // data)方法中,resultCode表示从Other这个Activity跳转到IntentResult这个Activity的标记,必须是大于1的整数 // 注意的时候resultCode 必须与IntentResult中的 onActivityResult(int // requestCode, int resultCode, Intent data)的参数resultCode要一致的。 setResult(RESULTCODE_TO_INTENTRESULT, intent); finish();// 结束当前的Activity的声明周期 } }); } private void initComponent() { button = (Button) findViewById(R.id.button); inputResult = (EditText) findViewById(R.id.result); tx = (TextView) findViewById(R.id.msg); } }