2014-02-15 66 views
0

我有一个自定义布局,我用对话框首选项,并且布局在对话框中显示正常,但问题是我有布局中的复选框,并检查它们不使他们按预期行事。下面是我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. 
} 

当应用程序正在运行,并且我有日志开放,我想选择的第一或第二检查,我总是看到由日志结印值0 ,表示所选变量永远不会按预期更新。我试图把复选框代码放在

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

方法和那导致相同的结果。在检查复选框时,该文件的哪种方法是放置代码所需的代码的适当位置?

回答

0

你应该重写onCreateDialogView并把onCheckChangeListeners放在那里。现在的问题是,他们只在onDialogClosed被调用时才进行监听,这是在你尝试检查它们之后。

+0

这样做会更有意义,我试过这样做,但它仍产生了我以前遇到的相同结果,这不是预期的结果 – ez4nick