回答

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

相关问题