android 1.6,后退按钮和onActivityResult

时间:2012-02-06 20:25:54

标签: android back-button

我正在开发一个以android 1.6为目标的项目。

所以,我不能使用

@Override public void onBackPressed(){...}

我正在用

开始一项活动
startActivityForResult(intent,requestcode)

我不想用

取回一些信息
@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) 

问题如下:

- '活动A'抛出'活动B'

- 在'ActivityB'按下硬件后退按钮

- '活动A的onActivityResult被调用,但我没有得到任何数据信息(data == null)

我正在尝试在“活动B”中添加一些额外的信息

@Override protected void onPause(){...}

我也调用setResult(RESULT_OK,i);进入这个onPause,但我总是得到RESULT_CANCELED和数据== null在'活动A的onActivityResult

3 个答案:

答案 0 :(得分:9)

您可以使用:

代替onBackPressed
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        //set result and finish()

    } else { 
        return super.onKeyDown(keyCode, event);
    }
}

答案 1 :(得分:2)

我没有看到你来回传递的常数的值。而且它们很重要。

以下是我调用结果活动的一些工作代码:

------------------------------------- PackVideo 活动 - -------------------------------------

调用ServerSetActivity

Intent serverSetIntent = new Intent();
serverSetIntent.setClass(this, ServerSetActivity.class);
startActivityForResult(serverSetIntent, CHANGE_IP);

常数设置和结果捕获:
(我把它们放在一起,因为只有这里才能捕获两个costants见面)

static public int CHANGE_IP = 1000;
static public int CHANGE_IP_DONE = 1001;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request was for CHANGE_IP and the request was CHANGE_IP
    if (resultCode == CHANGE_IP_DONE && requestCode == CHANGE_IP) {
        readBaseInfoFromServer(getApplicationContext());
        startVideoPlayerService(getApplicationContext());
        setCurrentChannelAndPlay(getApplicationContext(), 0);
    }
}

----------------------------------- ServerSetActivity ---- ------------------------------------

被叫活动的结束

final Intent intent = new Intent();
setResult(PackVideo.CHANGE_IP_DONE, intent);
finish();

答案 2 :(得分:0)

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // check if the request code is same as what is passed  here it is 2
        if (resultCode != RESULT_OK) {
            if (requestCode == 2 && data != null) {
//DO YOUR  OVER HERE}