2015-06-12 221 views
2

我創建了一個用於不同活動的AlertDialog片段。出於某種原因,警報不會被駁回,主要活動中的代碼不會繼續。我輸入了很多日誌命令來查看它到底停在哪裏。以下是我的提醒Dialog:AlertDialog沒有被解僱。

public class Convert_units_dialog extends DialogFragment { 
final static String TAG = "TAG_convert_units"; 

public static Convert_units_dialog newInstance() { 
    Convert_units_dialog frag = new Convert_units_dialog(); 
    Bundle args = new Bundle(); 
    args.putInt("title", R.string.change_units_dialog); 
    frag.setArguments(args); 
    return frag; 
} 


public Dialog onCreateDialog(Bundle savedInstanceState) { 
    int title = getArguments().getInt("title"); 

    return new AlertDialog.Builder(getActivity()) 
      .setTitle(title) 
      .setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.i(TAG, "inside click listener"); 
        convert_units(); 
        //dismiss dialog here 
        Log.i(TAG, "Start dismiss"); 
        dismiss(); 
        Log.i(TAG, "End dismiss"); 
       } 
      }) 
      .setNegativeButton(R.string.dont_convert,null) 
      .create(); 
} 

在我的活動中,我創建了一個調用alertDialog的函數。

private void open_alert_dialog() { 
    DialogFragment newFragment = Convert_units_dialog.newInstance(); 
    newFragment.show(getFragmentManager(), "dialog"); 
    Log.i(TAG,"open_alert_dialog finished"); 

} 

當我運行我的代碼我得到「最終駁回」在日誌中再也看不到「open_alert_dialog完成」,所以按照我的活動這個命令的代碼沒有運行。有什麼明顯的我做錯了嗎?我已經嘗試了很多我見過的建議,但目前還沒有任何建議。

我對編程有點新,一般會感激任何輸入。謝謝。

+1

當您點擊正面按鈕時,您的應用程序崩潰了嗎? 您應該在崩潰時複製/粘貼logcat。 – PAD

回答

1

您的代碼似乎是正確的,但嘗試了一些東西,讓我們看看它是否解決:

  • 檢查進口DialogFragmentAlertDialog,他們應該在你的活動和Convert_units_dialog相同。 (如果您使用的是appcompat-v7庫,則會顯示其他導入選項)
  • On setPositiveButton嘗試調用dialog.dismiss();而不是dismiss();

爲了給你,我們需要像一些信息的準確的答案:

  • 什麼是convert_units的實現();
  • 如果你的活動你叫open_alert_dialog()

最後,檢查文件,我相信你已經檢查它,但它是值得一試再讀一遍:http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog

+0

我想我可能誤解了發生的事情。該對話被駁回,但似乎原始活動中的代碼沒有繼續。我認爲我的錯誤是我無法從alertdialog接收信息。當我從文檔中實現doPositiveClick()方法時,我能夠將剩餘的應該在活動中發生的事情放在那裏,並且工作。 – ThomasK

+0

噢好吧,很高興它的工作,現在你應該在對話框上爲你的回調創建一個接口,以便任何活動都可以使用它。 像這樣:http://developer.android.com/guide/topics/ui/dialogs.html#PassingEvents –

1

更新:

我想我誤解了發生了什麼,並已經通過文檔發現了它。我添加了一個方法調用doPositiveClick()

我的新代碼如下所示:

return new AlertDialog.Builder(getActivity()) 
      .setTitle(title) 
      .setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.i(TAG, "inside click listener"); 
        convert_units(); 
        //dismiss dialog here 
        ((Settings)getActivity()).doPositiveClick(); 
       } 
      }) 
      .setNegativeButton(R.string.dont_convert,null) 
      .create(); 

} 

然後,我創建了doPositiveClick()在我的活動與我所期待的後運行代碼的其餘部分alertDialog被解僱了。

 public void doPositiveClick() { 
    // Do stuff here. 
    Log.i("FragmentAlertDialog", "Positive click!"); 
    display_maxes(); 
} 

事情現在按預期工作。