我有两个使用startActivityForResult调用第三个活动的活动,但在第三个活动完成后,应用程序在调用onActivityResult之前失败。当我最初只有一个活动调用它时,它工作正常,如果我使用调试器它工作,这通常意味着一些未初始化的东西。我的代码如下:
活动A:
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(ActivityA.this, AddActivity.class);
startActivityForResult(intent, ADD_CATEGORY);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_CATEGORY && resultCode == RESULT_OK) {
if (data.getCharSequenceExtra("Added") != null) {
String category = data.getCharSequenceExtra("Added").toString();
categoryList.add(category);
}
}
}
活动B:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(ActivityB.this, AddActivity.class);
startActivityForResult(intent, ADD_ITEM);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_ITEM && resultCode == RESULT_OK) {
String item = data.getCharSequenceExtra("Added").toString();
if (currentList == null) {
currentList = new ArrayList<String>();
}
currentList.add(item);
Collections.sort(currentList);
}
}
活动C:
public class AddActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add);
final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
// Return added item to the calling activity
Intent intent = new Intent();
CharSequence text = edittext.getText();
intent.putExtra("Added", text);
setResult(RESULT_OK, intent);
finish();
return true;
}
return false;
}
});
}
}
我错过了什么或者这可能是Android的错误吗?
答案 0 :(得分:1)
尝试在if(data != null && data.hasExtra("Added")){
函数中使用onActivityResult
来验证是否确实传回了data
个变量。如果用户点击后退按钮,它将返回上一个活动,但data
中的onActivityResult
将为空。
答案 1 :(得分:0)
请确保根据您的活动电话将结果设置为AddActivity
...显示您的logcat ..
答案 2 :(得分:0)
虽然在这种情况下可能不太可能,但它总是值得一提:
在startActivityForResult开始的活动中没有设置额外内容的最常见原因可能是它们是 SingleTask 活动。
在新活动开始之前,在自己的任务中运行的所有活动都将导致使用RESULT_OK调用onActivityResult()。
在SingleTask活动中调用setResult()是没有意义的,也不会做任何有用的事情。