我有一个MainActivity
which 有两个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 中存在错误。在
startActivityForResult(intent, requestCode);
这个函数中,只要requestCode = 0
. 但是,如果您将请求代码更改为零以外的任何值,ApiDemos 将失败(并且不会调用 onActivityResult())。