Error: No view found for id androidx(Jetpack) Preference library
Error: No view found for id androidx(Jetpack) Preference library
我按照说明 on docs 使用 Android Jetpack 首选项库,但出现以下错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
因为我认为这通常发生在没有容器来装载片段时,但在我的情况下有一个容器(settings_container
)。
我的代码如下所示
设置活动
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, SettingsFragment())
.commit()
}
}
SettingsFragment
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_main, rootKey)
}
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/settings_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.SettingsActivity">
</FrameLayout>
pref_main.xml(缩短)
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
app:key="data_sync_category"
app:title="@string/pref_data_sync_category">
<SwitchPreferenceCompat app:key="data_sync_status"
app:title="@string/pref_data_sync_status_title"
app:summary="@string/pref_data_sync_status_summary"
android:defaultValue="true"
/>
<ListPreference app:key="what_data_sync"
app:title="@string/pref_sync_frequency_title"
app:summary="@string/pref_sync_frequency_summary"
android:entries="@array/pref_sync_frequency_titles"
android:entryValues="@array/pref_sync_frequency_values"
android:defaultValue="30"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>
如您所见,代码与文档中的代码几乎相同。
我试过使无效并重新启动,但没有用。
请帮忙
不,没有容器。
您从未在 Activity 中使用 setContentView()
,因此该布局不存在。 tools:context
是 IDE 独有的功能。
您需要使用
setContentView(R.layout.activity_settings)
就在调用 super.onCreate(savedInstanceState)
之后。
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
根据您的代码,您没有为 activity
设置布局
您提供了 settings_container
的参考,但在 activity 布局中找不到它,因为它们没有布局文件,因此您需要 setContentView
用于 activity
setContentView(R.layout.name)
public void setContentView (int layoutResID)
从布局资源中设置 activity 内容。资源将被扩充,将所有顶级视图添加到 activity.
将您的 activity kt 文件替换为
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, SettingsFragment())
.commit()
}
}
我按照说明 on docs 使用 Android Jetpack 首选项库,但出现以下错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
因为我认为这通常发生在没有容器来装载片段时,但在我的情况下有一个容器(settings_container
)。
我的代码如下所示
设置活动
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, SettingsFragment())
.commit()
}
}
SettingsFragment
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_main, rootKey)
}
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/settings_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.SettingsActivity">
</FrameLayout>
pref_main.xml(缩短)
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
app:key="data_sync_category"
app:title="@string/pref_data_sync_category">
<SwitchPreferenceCompat app:key="data_sync_status"
app:title="@string/pref_data_sync_status_title"
app:summary="@string/pref_data_sync_status_summary"
android:defaultValue="true"
/>
<ListPreference app:key="what_data_sync"
app:title="@string/pref_sync_frequency_title"
app:summary="@string/pref_sync_frequency_summary"
android:entries="@array/pref_sync_frequency_titles"
android:entryValues="@array/pref_sync_frequency_values"
android:defaultValue="30"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>
如您所见,代码与文档中的代码几乎相同。 我试过使无效并重新启动,但没有用。
请帮忙
不,没有容器。
您从未在 Activity 中使用 setContentView()
,因此该布局不存在。 tools:context
是 IDE 独有的功能。
您需要使用
setContentView(R.layout.activity_settings)
就在调用 super.onCreate(savedInstanceState)
之后。
java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
根据您的代码,您没有为 activity
设置布局您提供了 settings_container
的参考,但在 activity 布局中找不到它,因为它们没有布局文件,因此您需要 setContentView
用于 activity
setContentView(R.layout.name)
public void setContentView (int layoutResID)
从布局资源中设置 activity 内容。资源将被扩充,将所有顶级视图添加到 activity.
将您的 activity kt 文件替换为
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, SettingsFragment())
.commit()
}
}