2011-03-13 43 views
2

在我正在处理的小应用程序中,我需要能够从数据库表中选择一条记录。当ListActivity完成时未调用onActivityResult

为了做到这一点,我创建的ListActivity一个子类,GameListScreen,它显示的记录,并覆盖onListItemClick()如下:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    Game g = (Game)getListView().getItemAtPosition(position); 
    Intent intent = new Intent(); 
    intent.putExtra("id", g.getId()); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 

然后,为了发动我的活动,我有这在我的MainMenu活动;一个onClick处理器的Button

public void openGameClick(View view) { 
    Intent intent = new Intent(this, GameListScreen.class); 
    startActivityForResult(intent, -1); 
} 

,并得到的结果,也是在MainMenu类:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) { 
     // result is handled here 
    } 
} 

一切工作完全按预期 - 在ListActivity开始,我可以看到我的记录,当我选择一个,onListItemClick正在运行 - 但onActivityResult没有被调用,我不知道为什么。在另一个项目中,我遵循相同的基本原则,并在那里工作。

我在这里错过了什么?我相信这是一个简单的错误,但我无法发现它。

我上传了my project以防万一。我正在使用Android 2.2进行测试,因为这是我的手机正在使用的。

回答

10

也许这就是为什么

从的javadoc:

启动为您希望的结果,当它完成了一个活动。当此活动退出时,将使用给定的requestCode调用onActivityResult()方法。 使用负的requestCode与调用startActivity(Intent)相同(活动不作为子活动启动)。

+0

确实,将它设置为0的确有窍门。但我不确定为什么,因为看着我的另一个项目,我在那里使用了-1,但也许我忘了从我的另一台计算机上对我进行更改。噢,很好 - 谢谢你们的帮助,现在我终于可以继续前进。 – 2011-03-13 14:02:02

+0

我有同样的问题,并传递一个负值作为我的requestCode。立刻改变为requestCode的正值,这就是诀窍。 – 2012-01-15 05:01:06

相关问题