gpt4 book ai didi

java - Android Fragment错误:找不到ID为0x7f08009e(com.example.myapplication:id/preferenceFragment)的 fragment 的 View

转载 作者:行者123 更新时间:2023-12-02 12:41:00 25 4
gpt4 key购买 nike

我正在尝试创建一个设置菜单(PreferenceScreen),当用户单击MainActivity工具栏中的某个项目时会打开该菜单。但是,当用户单击MainActivity工具栏中的“设置”项时,将出现以下错误:

   E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 20257
java.lang.IllegalArgumentException: No view found for id 0x7f08009e (com.example.myapplication:id/preferenceFragment) for fragment MyPreferenceFragment{212e66e (2406d527-5781-4a6b-845c-e7ed6f2b1d9a) id=0x7f08009e}
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:875)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7045)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

以下是MainActivity中我为 PreferenceScreen启动Activity的代码:
// Launch the menus when the user clicks on one of the menu items
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle presses on the action bar menu items
when (item.itemId) {
R.id.settings -> { // User pressed "Settings" button
try {
val settingsFragment:Fragment = MyPreferenceFragment() // Create the Settings Fragment
val transaction:FragmentTransaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.preferenceFragment, settingsFragment)
transaction.addToBackStack(null)
transaction.commit()
}
catch (ex:Exception) {
println("Exception: " + ex.toString())
}
return true
}
R.id.about -> { // User pressed "About" button
println("ABOUT BUTTON CLICKED")
return true
}
R.id.share -> { // User pressed "Share" button
println("SHARE BUTTON PRESSED")
return true
}
}
return super.onOptionsItemSelected(item)
}

以下是我的片段代码( MyPreferenceFragment):
package com.example.myapplication;

import android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SeekBarPreference;
import com.example.myapplication.R;

public class MyPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
final SeekBarPreference fontSizeSeekBar = (SeekBarPreference) findPreference("font_size");
}
}

以下是我的Fragment Activity( MyPreferencesActivity.kt)代码:
package com.example.myapplication

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity


class MyPreferencesActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pref)
}
}

以下是 AndroidManifest.xml的代码(其中包括 Preference Activity ):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MyPreferencesActivity"></activity>
</application>
</manifest>

以下是我的首选项页面的XML代码( preferences.xml):
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.preference.SeekBarPreference
android:key="font_size"
android:title="Font Size"
android:min="12"
android:max="32"
android:defaultValue="14" />
</androidx.preference.PreferenceScreen>

以下是我的片段的代码,其中包含首选项页面( activity_pref.xml):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<fragment
android:id="@+id/preferenceFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.myapplication.MyPreferenceFragment" />
</FrameLayout>

我的 activity_main.xml布局不包含 preferences.xmlactivity_pref.xml

注意:我正在寻找一个答案,该答案必须能够使用户单击 MainActivity的工具栏中的项目,并启动一个包含SeekBarPreference的首选项屏幕(可以按语法检索,即最终的SeekBarPreference fontSizeSeekBar =(SeekBarPreference )findPreference(“font_size”);)。启动片段但不能以语法方式检索SeekBarPreference的答案将不被接受。

最佳答案

您有两个 Activity :MainActivity和MyPreferencesActivity。从已发布的代码中绝对不清楚在何处以及如何启动后者。您在MyPreferencesActivity中设置了Content,但在MainActivity中替换了片段。由于未通过MainActivity中的setContent设置容器,因此无法找到和替换id / preferenceFragment。

您需要先启动MyPrefenceActivity,例如通过创建和启动Intent,然后在为容器设置内容之后替换MyPrefenceActivity类中的 View 。

如果需要,您还可以创建带有菜单的工具栏,该菜单栏特定于MyPreferencesActivity并在此 Activity 中处理onOptionsItemSelected。

我已经在这里详细描述了后一种情况:add an actionbar for each fragment

关于java - Android Fragment错误:找不到ID为0x7f08009e(com.example.myapplication:id/preferenceFragment)的 fragment 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60583432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com