当多个活动调用startActivityForResult时,应用程序失败

时间:2011-09-02 05:57:46

标签: android

我有两个使用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的错误吗?

3 个答案:

答案 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()是没有意义的,也不会做任何有用的事情。