回答

199

這是一個簡單的alert dialog,費德里科給了你一個網站,你可以查找的東西。

下面是如何構建警報對話框的簡短示例。

new AlertDialog.Builder(this) 
.setTitle("Title") 
.setMessage("Do you really want to whatever?") 
.setIcon(android.R.drawable.ic_dialog_alert) 
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface dialog, int whichButton) { 
     Toast.makeText(MainActivity.this, "Yaay", Toast.LENGTH_SHORT).show(); 
    }}) 
.setNegativeButton(android.R.string.no, null).show(); 
+3

我知道如何建立一個對話,但我對喜好Q值。 – sh1ng 2011-02-26 14:45:32

+1

你的問題是關於偏好?好的。看看這裏:http://www.kaloer.com/android-preferences – Maaalte 2011-02-26 14:49:26

+1

我已經閱讀這個來源。我可以創建訂閱OnClick的自定義首選項並處理它,但它是最簡單的方法嗎? – sh1ng 2011-02-26 14:58:03

3

使用意向偏好,如果您使用的偏好XML屏幕或你,如果你正在使用你自定義屏幕那麼代碼會像下面

intentClearCookies = getPreferenceManager().createPreferenceScreen(this); 
    Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class); 

    intentClearCookies.setIntent(clearcookies); 
    intentClearCookies.setTitle(R.string.ClearCookies); 
    intentClearCookies.setEnabled(true); 
    launchPrefCat.addPreference(intentClearCookies); 

然後像下面創建活動類有所作爲不同的人,你可以使用任何你喜歡的方法,這只是一個例子。

public class ClearCookies extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    showDialog(); 
} 

/** 
* @throws NotFoundException 
*/ 
private void showDialog() throws NotFoundException { 
    new AlertDialog.Builder(this) 
      .setTitle(getResources().getString(R.string.ClearCookies)) 
      .setMessage(
        getResources().getString(R.string.ClearCookieQuestion)) 
      .setIcon(
        getResources().getDrawable(
          android.R.drawable.ic_dialog_alert)) 
      .setPositiveButton(
        getResources().getString(R.string.PostiveYesButton), 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          //Do Something Here 

         } 
        }) 
      .setNegativeButton(
        getResources().getString(R.string.NegativeNoButton), 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          //Do Something Here 
         } 
        }).show(); 
}} 

如前所述,有很多方法可以做到這一點。這是你完成任務的方法之一,如果你覺得你已經得到了你想要的結果,請接受答案。

+0

謝謝!這幾乎正​​是我的應用程序所需要的,因爲我從服務中觸發對話,在我的情況下,我需要一個活動來託管對話。 – 2014-01-06 11:49:15

+0

喜歡它。恕我直言,詳細,但批准和正確的方式 – John 2015-01-30 14:00:55

8

Android帶有一個內置的YesNoPreference類,它完全按照您的需要進行操作(帶有yes和no選項的確認對話框)。查看官方源代碼here

不幸的是,它位於com.android.internal.preference包中,這意味着它是Android私有API的一部分,您無法從您的應用程序訪問它(私有API類如有更改,恕不另行通知,因此Google不會讓你訪問它們)。

解決方案:只需從我提供的鏈接複製/粘貼官方源代碼,在應用程序包中重新創建類。我試過這個,它工作正常(沒有理由爲什麼它不應該)。

然後,您可以像其他偏好一樣將其添加到您的preferences.xml。例如:

<com.example.myapp.YesNoPreference 
    android:dialogMessage="Are you sure you want to revert all settings to their default values?" 
    android:key="com.example.myapp.pref_reset_settings_key" 
    android:summary="Revert all settings to their default values." 
    android:title="Reset Settings" /> 

,看起來像這樣:

screenshot

+1

偉大的解決方案!但是這個類的構造函數有一個問題!它引用了一個資源attr(com.android.internal.R.attr.yesNoPreferenceStyle)!哪個不能解決。什麼是解決方法?我是否必須在自己的項目中創建一個? – reubenjohn 2014-05-28 08:00:17