2011-09-02 76 views
0

我有两个活动使用startActivityForResult调用第三个活动,但在第三个活动完成之后,应用程序失败之前onActivityResult被调用。当我最初只有一个活动调用它时,它运行良好,如果我使用它的调试器,它通常意味着未初始化。我的代码如下:当多个活动调用时,应用程序失败startActivityForResult

活动答:

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

请问您可以放置​​错误日志吗?并将onclicklistener格式化为代码:) – Arkde

+0

logcat对崩溃有何说法?你能包括崩溃转储吗? – Femi

+0

logcat中没有显示出来。我需要打开什么吗?我不认为有一个崩溃转储。对不起,我是Android和Eclipse的新手,所以我只是把事情搞清楚。 – kaz

回答

0

请确认您是按您的通话活动设置结果AddActivity ...显示您的logcat ..

1

尝试使用if(data != null && data.hasExtra("Added")){里面你onActivityResult功能验证,实际上是有一个data变量传递回来。如果用户点击后退按钮,它将返回到之前的活动,但data将在onActivityResult中为空。

+0

我将添加空数据检查来处理后退按钮的情况,但不要认为这是我看到的问题,因为我实际上键入了一些文本,并且当我按下Enter键时,应用程序失败。一条消息出现,说这个过程停止了。 – kaz

+0

我也知道onActivityResult没有被调用,因为我在开始时放了一个Toast调用,并没有得到执行。 – kaz

0

虽然它可能是不太可能在这种情况下,它总是值得一提:

可能是不为活动设置额外的最常见原因开始startActivityForResult是,他们SingleTask活动。

在新活动甚至开始之前,所有在其自己的任务中运行的活动都会导致使用RESULT_OK调用onActivityResult()。

在SingleTask活动中调用setResult()是毫无意义的,不会做任何有用的事情。

相关问题