PreferenceFragment:在onSharedPreferenceChanged()中启动AlertDialog

时间:2013-03-03 23:54:29

标签: android android-preferences

我在点击AlertDialog时尝试显示SwitchPreference消息。我试图使用this,但是我收到了一个错误:构造函数AlertDialog.Builder(设置)未定义。所以我使用了getActivity(),但这种方法没有显示任何内容。

也有人知道如何在选择偏好和选择勾选方框之间执行不同的操作。你知道在某些设置中如何点击首选项文本它会给你一个描述,然后你必须点击小方框来实际启用/禁用。

public class Settings extends PreferenceFragment implements OnSharedPreferenceChangeListener{

    Bundle savedInstanceState;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);

        this.savedInstanceState = savedInstanceState;
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("this")) {
            final SwitchPreference sp = (SwitchPreference) getPreferenceScreen().findPreference(key);
            if (sp.isChecked()) {
                System.out.println("enabled");
            } else {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setMessage("blah...")
                        .setTitle("Title")
                        .setPositiveButton("proceed", new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int id) {
                                System.out.println("positive");
                            }
                        })
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int id) {
                                sp.setChecked(true);
                                System.out.println("cancled");
                            }
                        })
                        .create();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

完成AlertDialog的构建后,最后一次通话应为AlertDialog.Buidler.show(),而不是AlertDialog.Builder.create()。但是,如果您致电create(),稍后您可以使用Dialog.show()

另请注意,您可能希望使用Log进行调试,而不是System.out