Java 使用带有自定义布局的对话框首选项

Java 使用带有自定义布局的对话框首选项,java,android,checkbox,dialog-preference,Java,Android,Checkbox,Dialog Preference,我有一个与对话框首选项一起使用的自定义布局,该布局在对话框中显示良好,但问题是,我在布局中有复选框,选中它们不会使它们按预期的方式工作。下面是我的DialogPreferences.java类的代码: @Override protected void onDialogClosed(boolean positiveResult) { LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater(); Vie

我有一个与对话框首选项一起使用的自定义布局,该布局在对话框中显示良好,但问题是,我在布局中有复选框,选中它们不会使它们按预期的方式工作。下面是我的DialogPreferences.java类的代码:

@Override
protected void onDialogClosed(boolean positiveResult) {
    LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
    View view = inflater.inflate(R.layout.imagechoice, null);
    button1 = (CheckBox)view.findViewById(R.id.background1);
    button2 = (CheckBox)view.findViewById(R.id.background2);
    button3 = (CheckBox)view.findViewById(R.id.background3);
    button4 = (CheckBox)view.findViewById(R.id.background4);

    button1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            selected=1;
            button2.setChecked(false);
            button3.setChecked(false);
            button4.setChecked(false);
        }
    });
    button2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            selected=2;
            button1.setChecked(false);
            button3.setChecked(false);
            button4.setChecked(false);
        }
    });
    if(positiveResult){
        Log.d("BACKGROUND onDialogClosed", Integer.toString(selected));
        persistInt(selected);
    }

    super.onDialogClosed(positiveResult);    //To change body of overridden methods use File | Settings | File Templates.
}
当应用程序正在运行并且我打开了日志时,我尝试选择第一个或第二个检查,我总是看到log语句打印的值0,这表示所选变量从未按预期更新。我已尝试将复选框代码放入

public DialogPreferences(Context oContext, AttributeSet attrs)
{...}

方法得出了相同的结果。选中复选框时,此文件的哪个方法是放置执行某些操作所需代码的正确位置?

您应该覆盖onCreateDialogView,并将onCheckChangeListeners放在其中。问题是,目前他们只在调用onDialogClosed时侦听,这是在您尝试检查他们之后

这会更有意义,我尝试过这样做,但它仍然产生了我以前经历过的相同结果,这不是预期的结果