2013-01-24 87 views
0

標題可能不是很清楚,它的類型很難在簡短的標題中解釋。但這是問題。來自活動的Show Alert對話框活動從片段返回結果

我有一個活動,MainActivity然後顯示一個活動開始顯示FragmentA。在MainActivity有一個菜單顯示可通過FragmentA訪問。從FragmentA的菜單中,用戶點擊Generate Password,然後調用另一個名爲GeneratePassword的活動,使用startActivityForResult進行調用。當用戶按下提交按鈕時,用戶然後被髮送回片段A和MainActivity內的功能onActivityResult。在這個函數中,我使用了一個通用的類,它允許我使用Yes和No Button來顯示AlertDialog。如果我拿出common.showYesNoDialog()if語句OnActivityResult工作正常,但是這是在使用時我得到一個異常

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

下面是啓動GeneratePassword活動代碼

Intent generatePasswrodIntent = new Intent(mMainActivity, GeneratePassword.class); 
       startActivityForResult(generatePasswrodIntent, AddNewLogin.GENERATE_PASSWORD); 
       return(true); 

以下是從GeneratePassword活動

Intent intent = new Intent(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("password", generatePassword.generatePassword()); 
     intent.putExtras(bundle); 
     setResult(AddNewLogin.GENERATE_PASSWORD, intent); 
     finish(); 

下面設置結果的代碼是從onActivityResult顯示的警告對話框中的代碼

Bundle bundle = data.getExtras(); 

     String password = bundle.getString("password"); 
     Log.d("PASSWORD", password); 
     if (common.showYesNoDialog("Your Generated Password Is:\n " + password + "\nDo you want to copy this to the clipboard?", false)) 
     { 
      ClipboardManager clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
      clipboard.setText(password); 
     } 

下面是YesNoDialog功能,但我知道,因爲我已經在好幾個地方使用它在我的應用程序中沒有問題這工作正常。

final Handler handler = new Handler() 
     { 
      @Override 
      public void handleMessage(Message mesg) 
      { 
       throw new RuntimeException(); 
      } 
     }; 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setCancelable(isCancelable); 
      builder.setMessage(message) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
        dialogResult = true; 
        handler.sendMessage(handler.obtainMessage()); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
        dialogResult = false; 
        handler.sendMessage(handler.obtainMessage()); 
       } 
      }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
     try 
     { 
      Looper.loop(); 
     } 
     catch (RuntimeException ex) 
     { 
      Log.d("Dialog Error", ex.toString()); 
     } 
     return dialogResult; 

而且下面是怎麼了初始化普通類,而不是getApplicationContext的

Common common = new Common(getApplicationContext()); 

,我試過用this但沒有任何區別。

我只是不明白這裏發生了什麼。

感謝您的幫助,您可以提供

回答

0

的問題是在你的showYesNoDialog()。你的showYesNoDialog()方法的布爾參數是做什麼的?

+0

我知道這個功能沒有什麼問題,我用過很多應用程序的其他部分,問題是警告對話框無法顯示。作爲參考,布爾參數isCancelable用於確定AlertDialog是否可以通過用戶按下builder.setCancelable(isCancelable);'' – Boardy

+0

「上使用的後退按鈕來取消。 LogCat中沒有給你具體的行嗎?如果不是,那麼它會擊敗我。抱歉。 – Don