2011-04-07 122 views
2

我试图在调用菜单中的某个选项时调用AlertDialog。用户选择的内容非常重要,可以作为参数传递给网络上的XML页面。Android AlertDialog不会在菜单选项中调用时显示

我试过以下,但我的AlertDialog从不显示,它直接进入我的下一个活动。

@Override 
    public boolean onOptionsItemSelected(MenuItem item) {  
     // Handle item selection  
     switch (item.getItemId()) {  
     case R.id.kantoor: 
      //Opent de office activity 
      final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
      String arbeiderbed = pref.getString("ArbeiderBediende", ""); 

      if(arbeiderbed.equals("")){ 
       final CharSequence[] beroep = {"Arbeider","Bediende"}; 

       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setTitle("Kies uw statuut"); 
       builder.setSingleChoiceItems(beroep, -1, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         if (beroep[which].equals("Arbeider")){ 
          SharedPreferences.Editor editor = pref.edit(); 
          editor.putString("ArbeiderBediende", "arbeider"); 
          editor.commit(); // Very important 
         } 
         else{ 
          SharedPreferences.Editor editor = pref.edit(); 
          editor.putString("ArbeiderBediende", "bediende"); 
          editor.commit(); // Very important 
         }       
        } 
       }); 
       builder.create().show(); 

      } 
      Intent office = new Intent(MainActivity.this, Settings.class); 
      startActivity(office); 
      return true; 

回答

0

当然是的。警报对话框不是模态的,这意味着show()方法不会阻止进一步代码的执行。如果您希望活动在对话框关闭时启动,则应将例如startActivity()的调用放入对话框按钮的单击监听器中。

+0

好的。但用户可能已经在他的设置中指定了他的选择。这就是为什么我打电话给我的SharedPreferences。如果指定,应用程序需要触发Activity而不弹出AlertDialog。 – Hannelore 2011-04-07 13:46:40

+0

这样做没有复制代码... – Hannelore 2011-04-07 13:53:11

+0

好吧,然后将调用活动的代码提取到方法中并调用该方法。你也应该有一个调用这个方法的'else'分支。 – 2011-04-07 13:57:10