Так, во время определенных состояний в моем приложении я хочу отключить определенные CheckBoxPreferences в моем меню настроек. Однако, если пользователь щелкает их, я хочу, чтобы показывался пояснительный тост. Если я просто делаю setEnable (false); на CheckBoxPreference я получаю правильный внешний вид. Но я не могу получить тост, который будет отображаться при щелчке. С другой стороны, мне не удалось вручную сделать CheckBoxPreference похожим на него отключен.
Вместо того, чтобы отключать настройку, вы также можете отключить только представления настройки.
public class DisabledAppearanceCheckboxPreference extends CheckBoxPreference {
protected boolean mEnabledAppearance = false;
public DisabledAppearanceCheckboxPreference(Context context,
AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
boolean viewEnabled = isEnabled()&&mEnabledAppearance;
enableView(view, viewEnabled);
}
protected void enableView( View view, boolean enabled){
view.setEnabled(enabled);
if ( view instanceof ViewGroup){
ViewGroup grp = (ViewGroup)view;
for ( int index = 0; index < grp.getChildCount(); index++)
enableView(grp.getChildAt(index), enabled);
}
}
public void setEnabledAppearance( boolean enabled){
mEnabledAppearance = enabled;
notifyChanged();
}
@Override
protected void onClick() {
if ( mEnabledAppearance)
super.onClick();
else{
// show your toast here
}
}
}