2014-05-01 63 views
0

鑑於這種繼承樹爲什麼不能將ListPreference轉換爲首選項? (機器人)

java.lang.Object 
    ↳ android.preference.Preference 
     ↳ android.preference.DialogPreference 
      ↳ android.preference.ListPreference 

當我嘗試做

myListPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

我得到這個編譯錯誤:

The method setOnPreferenceClickListener(Preference.OnPreferenceClickListener) in the type Preference is not applicable for the arguments (new OnPreferenceClickListener(){})

此外,當我嘗試

myListPreference = getPreferenceManager().findPreference(DISPLAY_MESSAGE); 

Type mismatch: cannot convert from Preference to ListPreference

+0

不是你想投的偏好到ListPreference?繼承只有一種方法 – panini

+0

@panini,但如果我的運行時實例是一個ListPreference,那麼我應該可以downcast – likejiujitsu

+0

是的,但編譯器不知道你的運行時實例是一個ListPreference,它只能看到PreferenceManager# #findPreference()返回一個偏好。如果你想要,你可以明確地施放它。 – panini

回答

1

這兩個問題是不是有關。

問題1: 您可能缺少導入語句。改爲嘗試new Preference.OnPreferenceClickListener()或添加import Preference.OnPreferenceClickListener

問題2: 您不能隱式向上對象,只能隱式向下。你必須這樣做myListPreference = (ListPreference)getPreferenceManager().findPreference(DISPLAY_MESSAGE);

以供將來參考:

SubClass obj = getSuperClass(); // Not Valid, must cast 
SuperClass obj = getSubClass(); // Valid 
相關問題