私MainActivity
は2つの を持っていますTextView
。ユーザーには、別のアクティビティを開始し、そこからデータを選択しListView
てそれらを埋めるオプションがありますTextView
。私のメイン アクティビティには、ユーザーがデータを選択してメイン アクティビティに戻ることができるOnClickListener
を開始するがあります。私のコードは次のようになります。Activty
OnClickListener
private static final int PICK_START = 0;
private static final int PICK_END = 1;
@Override
public void onClick(View v) {
Log.i(MainActivity, "view clicked");
int id = v.getId();
if (id == R.id.searchR) {
//do nothing
} else if (id == R.id.startSearch) {
Intent startIntent = new Intent(this, SList.class);
startActivityForResult(startIntent, PICK_START);
} else if (id == R.id.endSearch) {
Intent startIntent = new Intent(this, SList.class);
startActivityForResult(startIntent, PICK_END);
}
}
上記の onClick メソッドが呼び出された後、別のアクティビティSList.classが開始されます。ユーザーが値を選択できるリストビューがあり、値を選択すると結果が設定され、アクティビティが終了します。これのコードは次のとおりです。 :
sListview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Station selectedS = sArray.get(position);
Intent returnIntent = new Intent();
returnIntent.putExtra("_id", selectedS.getId());
returnIntent.putExtra("name", selectedS.getName());
setResult(RESULT_OK, returnIntent);
finish();
}
});
上記のコード アクティビティでは、結果が設定され、それ自体が終了します。ここまでは、すべてが適切に機能しています。ただし、その後、前のアクティビティが開始されると、onActivityResult()
メソッドは呼び出されません。コードonActivityResult()
は次のとおりです。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(MainActivity, "" + requestCode);
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Check which request we're responding to
if (requestCode == PICK_START) {
//data.getStringExtra("_id");
Log.i(MainActivity, data.getStringExtra("name"));
} else if (requestCode == PICK_END) {
Log.i(MainActivity, data.getStringExtra("name"));
}
}
}
onActivityResult がトリガーされない理由がわかりません。誰かが彼のブログに Android API にバグがあると書いています。In
startActivityForResult(intent, requestCode);
この関数は、 である限り機能しrequestCode = 0
ます。ただし、リクエスト コードを 0 以外に変更すると、ApiDemos は失敗します (onActivityResult() は呼び出されません)。