【Android 复习】:从Activity中返回数据

  在实际的应用中,我们不仅仅要向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);
    }
}

 

本文转自http://blog.csdn.net/ahuier/article/details/8958128

posted @ 2013-09-03 16:20  似水流云  阅读(461)  评论(0编辑  收藏  举报