现在的位置: 首页 > 综合 > 正文

【Android 开发】:从Activity中返回数据

2013年10月19日 ⁄ 综合 ⁄ 共 3156字 ⁄ 字号 评论关闭

    在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递类似,也可以采用上一讲中的四种方式来传递数据,但是一般建议采用Intent对象的方式的来返回数据,使用这种方式返回数据,需要使用StartActivityForResult方法来显示Activity.

需求:如下图所示:输入 a 和 b 的值,然后点击输入计算机结果,跳转到另外Activity,输入结果,点击得出结果按钮,将得到的数值放在 第三个输入框中。使用StartActivityForResult()方式来实现。

程序Demo:

1. IntentResult.java

package com.android.intentresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

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

package com.android.intentresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

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

抱歉!评论已关闭.