前提・実現したいこと
Android Studio Kotlinでアプリの設定画面を制作しています。
メイン画面からボタンを押すといける画面を想定しています。
Preferenceを正常に読み込んで表示させたい。
公式のドキュメントを参考にしました。
設定 - Android Develops
発生している問題・エラーメッセージ
supportFragmentManager追加時にエラーでアプリが強制終了
supportFragmentManagerをコメントアウトすると、XMLに記述したPreferenceが読み込まれない
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.test, PID: 27255 java.lang.IllegalArgumentException: No view found for id 0x7f08007d (com.example.test:id/container) for fragment SettingsFragment{cf17e28} (da4c1fbf-8459-485d-b089-79672483ee87 id=0x7f08007d) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:513) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3138) at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251) at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433) at android.app.Activity.performStart(Activity.java:7980) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3655) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2270) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8125) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
該当のソースコード
res/xml/setting_activity.xml
xml
1<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:app="http://schemas.android.com/apk/res-auto"> 3 4 5 <Preference 6 app:key="test" 7 app:summary="テスト" 8 app:title="テスト" /> 9 <Preference 10 app:key="about" 11 app:summary="ライセンスなど" 12 app:title="このアプリについて" /> 13</PreferenceScreen>
Kotlin
1import android.os.Bundle 2import androidx.appcompat.app.AppCompatActivity 3import androidx.preference.PreferenceFragmentCompat 4 5class SettingsActivity : AppCompatActivity() { 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 10 supportFragmentManager 11 .beginTransaction() 12 .replace(R.id.container,SettingsFragment()) 13 .commit() 14 15 supportActionBar?.setDisplayHomeAsUpEnabled(true) 16 } 17 18 class SettingsFragment : PreferenceFragmentCompat() { 19 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 20 setPreferencesFromResource(R.xml.settings_activity, rootKey) 21 22 } 23 } 24}
AndroidManifest.xml(設定画面の部分のみ)
xml
1<activity 2 android:name=".SettingsActivity" 3 android:exported="true" 4 android:label="@string/title_activity_settings" />
補足情報(FW/ツールのバージョンなど)
Android Studio 2020.3.1
回答1件
あなたの回答
tips
プレビュー