2011-03-13 41 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

相關問題