Cannot resolve method 'addPreferencesFromResource(int)'
import android.preference.PreferenceActivity; // 顯示灰色不可用
addPreferencesFromResource(int) 是 PreferenceActivity 的方法,不是 Activity、AppCompatActivity 或 Fragment 的方法。若目前類別繼承自其他基類,編譯器找不到該方法。
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences); // 正常編譯
}
}
自 Android 3.0 起,建議使用 PreferenceFragment(或 AndroidX PreferenceFragmentCompat)嵌入一般 Activity:
// 1. 定義 Fragment
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
// 2. 一般 Activity 掛載 Fragment
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings); // 需包含 FrameLayout id=container
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new SettingsFragment())
.commit();
}
}
}
全 Kotlin/Flow 實作,無需 XML,適合新專案。
❌ 在 AppCompatActivity 直接呼叫 addPreferencesFromResource。
✅ 繼承 PreferenceActivity 或改用 PreferenceFragmentCompat。
❌ 匯入 android.preference.PreferenceActivity 卻不繼承它。
✅ 檢查類別宣告 extends PreferenceActivity。
若維護舊專案必須用 PreferenceActivity,請確保 Manifest 中該 Activity 的 android:theme 不衝突;新專請直接採用 PreferenceFragmentCompat + AppCompatActivity,獲得完整 Material Design 支援。