首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android addPreferencesFromResource 報錯?類別必須繼承 PreferenceActivity

     編輯:程式設計綜合問答

錯誤訊息

Cannot resolve method 'addPreferencesFromResource(int)'
import android.preference.PreferenceActivity; // 顯示灰色不可用

根本原因

addPreferencesFromResource(int) 是 PreferenceActivity 的方法,不是 Activity、AppCompatActivity 或 Fragment 的方法。若目前類別繼承自其他基類,編譯器找不到該方法。

解決方案

方案一:讓類別繼承 PreferenceActivity(傳統做法)

public class SettingsActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences); // 正常編譯
    }
}

方案二:使用 PreferenceFragmentCompat(現代推薦,支援 ActionBar/Toolbar)

自 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();
        }
    }
}

方案三:Jetpack Preferences DataStore(最新無 XML 方案)

全 Kotlin/Flow 實作,無需 XML,適合新專案。

常見誤區

❌ 在 AppCompatActivity 直接呼叫 addPreferencesFromResource。
✅ 繼承 PreferenceActivity 或改用 PreferenceFragmentCompat。
❌ 匯入 android.preference.PreferenceActivity 卻不繼承它。
✅ 檢查類別宣告 extends PreferenceActivity。

若維護舊專案必須用 PreferenceActivity,請確保 Manifest 中該 Activity 的 android:theme 不衝突;新專請直接採用 PreferenceFragmentCompat + AppCompatActivity,獲得完整 Material Design 支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved