【问题标题】:Android PreferenceFragment No view found for id for fragmentAndroid PreferenceFragment 没有找到片段 id 的视图
【发布时间】:2014-09-02 21:51:55
【问题描述】:

所以我正在制作一个 android 应用程序并开始处理首选项,当我简单地使用 PreferenceActivity 时,一切正常,但是,如果我将它与 PreferenceFragment 一起使用,它会在我单击调用意图的按钮后立即崩溃到 SettingsActivity 出现错误:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{*app package*/*app package*.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f08003d for fragment SettingsFragment{41cc1a98 #0 id=0x7f08003d}

这是设置活动:

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //addPreferencesFromResource(R.xml.preference);
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(R.id.pager, new SettingsFragment())
                .commit();
    }


    public static class SettingsFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.preference);

        }
    }
}

R.id.pager 只是一个简单的 viewPager 布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

我的偏好xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <CheckBoxPreference
        android:key="pref_sync"
        android:title="Sync?"
        android:summary="Do u wanna sync?"
        android:defaultValue="true" />

</PreferenceScreen>

我对 android 还是很陌生,所以任何帮助都会很棒!谢谢!!

编辑: 在正确答案的 cmets 中解决的问题

【问题讨论】:

    标签: android android-fragments android-preferences preferencefragment


    【解决方案1】:

    您必须先致电setContentView(R.layout.view_pager_layout)

    getFragmentManager().beginTransaction().replace(R.id.pager, new SettingsFragment()).commit();
    

    【讨论】:

    • 谢谢!但是尽管添加此行会停止错误,但它会显示一个空屏幕....
    • @ytt 您使用的是ViewPager,因此您需要设置一个适配器。如果您只想显示一个Fragment,请使用FrameLayout
    • 我使用的是ViewPager,因为应用程序的主屏幕是ViewPager,而“设置”按钮位于ActionBar...我该怎么办?
    • Fragment开始一个新的Activity
    • 所以我打电话给SettingsActivity 哪个电话SettingsFragmentSettingsFragment 会打电话给另一个Activity 你是这个意思吗??
    猜你喜欢
    • 2013-02-26
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多