確認(はい/いいえ)DialogPreferenceを実装する方法?


回答:


292

これは単純な警告ダイアログです。Federicoは、物事を検索できるサイトを提供しました。

以下は、警告ダイアログを作成する方法の短い例です。

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
ダイアログの作成方法は知っていますが、設定に関する私の質問です。
sh1ng

1
あなたの質問は好みについてですか?はい。ここを見てください:kaloer.com/android-preferences
Maaalte

1
私はすでにこのソースを読みました。OnClickにサブスクライブするカスタム設定を作成して処理できますが、それが最も簡単な方法ですか?
sh1ng

私はそう思います、少なくとも私はもっと簡単な他の方法を知りません。
Maaalte、2011

1
import android.support.v7.app.AlertDialog;を使用します。テーマなしのよりよい一見のための
majurageerthan

9

Androidには、必要な機能を正確に実行する組み込みのYesNoPreferenceクラスが用意されています(はいおよびいいえのオプションがある確認ダイアログ)。こちらから公式のソースコードをご覧ください

残念ながら、これは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" />

これは次のようになります。

スクリーンショット


1
素晴らしい解決策!しかし、このクラスのコンストラクターの1つに問題があります!リソースattr(com.android.internal.R.attr.yesNoPreferenceStyle)を参照しています!これは解決できません。回避策は何ですか?自分のプロジェクトで作成する必要がありますか?!
reubenjohn 2014年

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

前に言ったように、これを行う方法はいくつかあります。これは、タスクを実行する方法の1つです。希望どおりの結果が得られたと思われる場合は、回答を受け入れてください。


ありがとう!これは、サービスからダイアログをトリガーするため、アプリに必要なものとほぼ同じです。私の場合、ダイアログをホストするアクティビティが必要です。
Ralph Ritoch 2014年

大好きです。私見冗長が、承認され、正しい方法
ジョン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.