How to implement a confirmation (yes/no) DialogPreference?

我如何实现一个首选项,显示一个简单的是/否确认对话框?

有关示例,请参见 Browser->Setting->Clear Cache

127109 次浏览

这是一个简单的 警报对话框,费德里科给你一个网站,你可以在那里查找东西。

下面是一个如何构建警报对话框的简短示例。

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();

使用意图首选项,如果你使用的是 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();
}}

如前所述,有许多方法可以做到这一点。这是你完成任务的方法之一,如果你觉得你已经得到了你想要的,请接受这个答案。

Android 带有一个内置的 YesNoPreferences 类,它可以完全满足你的需求(一个带有是和否选项的确认对话框)。请参见官方源代码 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" />

Which looks like this:

screenshot