2012-02-06 62 views
2

我正在开发一个以android 1.6为目标的项目。android 1.6,后退按钮和onActivityResult

所以,我不能用

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

我开始与

startActivityForResult(intent,requestcode) 

一个活动,我wan't找回一些信息与

@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) 

问题如下:

-'Activity A”抛出‘活动B’

-during‘硬件后退按钮被按下

-'Activity A的onActivityResult叫,但我没有得到数据中的任何信息(数据ActivityB’= = NULL)

我试图把一些额外的信息,在“活动B的

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

我还呼吁的setResult(RESULT_OK,我);这个在onPause,但我总是RESULT_CANCELED和数据== NULL在“活动A的onActivityResult

回答

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

非常感谢pjanecze!你是对的。 在onPause(...),onPause之前,执行setResult(...)和finish()完成! 我认为这里的关键是,在onPause中完成任务是太迟了,setResult和finish都不会起作用。 – 2012-02-06 23:09:56

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(); 
+0

谢谢Gangnus 但问题不是这里的常量。 我认为更多的是执行流程问题。 问题在firts答案的第一条评论中得到解决。 – 2012-02-06 23:20:55

+0

好吧,对不起,我没有帮助:-) – Gangnus 2012-02-06 23:23:48

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}