2012-11-19 99 views
0

我有一个PreferenceScreen,用户可以选中/取消选中一个复选框。Mono For Android,FindViewById CheckBoxPreference?

要访问的活动的任何控制我总是习惯:

var button = FindViewById<Button>(Resource.Id.myButton); 

现在好了,我要访问我的CheckBoxPreference .. ,但其没有工作,我得到这个异常:

类型'Android.Preferences.CheckBoxPreference'不能用作泛型类型或方法'Android.App.Activity.FindViewById(int)'中的类型参数'T'。没有从'Android.Preferences.CheckBoxPreference'到'Android.Views.View'的隐式引用转换。

如何我PreferenceScreen.xml样子:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory 
    android:title="Basic" 
    android:id="@+id/preferenceCategory"> 
    <CheckBoxPreference 
     android:id="@+id/preferenceCheckBox" 
     android:key="usetestdata" 
     android:title="Testdata ON/OFF" 
     android:defaultValue="true" /> 
    </PreferenceCategory> 
</PreferenceScreen> 

和不工作代码:

var aCheckBox = FindViewById<CheckBoxPreference>(Resource.Id.preferenceCheckBox); 
aCheckBox.Enabled = false; 

也许有人可以帮助我,告诉我如何从一个活动中访问控制PreferenceScreen?

回答

1

下面是使用PreferenceActivity

代码
public class SettingsActivity extends PreferenceActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //add the prefernces.xml layout 
     addPreferencesFromResource(R.xml.preferences); 

    final CheckBoxPreference cf = (CheckBoxPreference) findPreference("checkbox")); 
    cf.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
         // do something here 
         return false; 
     } 
    }); 
} 

您的preferences.xml在XML文件夹

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <CheckBoxPreference android:key="checkbox" 
     android:title="Title"/> 
</PreferenceScreen> 
+0

感谢,这工作,我可以访问我的CheckBoxPreference ..你也知道,我怎么现在可以将CheckBoxPreference设置为IsEnabled = false?没有属性启用,就像普通的CheckBox有..任何想法? – eMi

+0

使用这种方法你可以设置值cf.setValue(true); – Pratik

+0

我并不是说Checked/Unchecked ..我现在解决了这个问题,我的意思是:cf.Enabled = false; – eMi