0

我正在尝试为我的 Android 4.0+ 应用程序建立一个设置屏幕。我无法获得两个复选框vibratePreferencesoundPreference显示。我认为UserPreferencesFragment永远不会实例化。以下是涉及的文件。我已经为此工作了几个晚上,但我无法弄清楚我错过了什么。我在看什么?

谢谢,解放军

首选项_headers.xml

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >

    <header
        android:fragment="com.hometelco.hfa.activities.UserPreferencesFragment"
        android:summary="Home Field Advantage user settings"
        android:title="User Settings" />

</preference-headers> 

首选项.xml

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

    <PreferenceCategory android:title="User Settings" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="vibratePreference"
            android:summary="Vibrate on adds and updates"
            android:title="Vibrate" />
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="soundPreference"
            android:summary="Play sound on adds and updates"
            android:title="Sound" />
    </PreferenceCategory>

</PreferenceScreen>

UserPreferencesActivity.java

package com.hometelco.hfa.activities;

import java.util.List;

import android.preference.PreferenceActivity;
import android.util.Log;

import com.hometelco.hfa.R;

public class UserPreferencesActivity extends PreferenceActivity {
    private static final String TAG = "UserPreferencesActivity";

    public void onBuildHeaders(List<Header> target) {
        Log.i(TAG, "onBuildHeaders before load");
        loadHeadersFromResource(R.xml.preference_headers, target);
        Log.i(TAG, "onBuildHeaders after load");
    }
}

UserPreferencesFragment.java

package com.hometelco.hfa.activities;

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.util.Log;

import com.hometelco.hfa.R;

public class UserPreferencesFragment extends PreferenceFragment {
    private final static String TAG = "UserPreferencesFragment";

    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "UserPreferencesFragment onCreate");
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}
4

3 回答 3

4

我道歉。我的代码实际上一直在工作。我只是没有按设置标题。当我这样做时,我的复选框出现了。这不是我想要的,所以我更改PreferenceActivity为下面看到的代码。

package com.hometelco.hfa.activities;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.util.Log;

import com.hometelco.hfa.R;

public class UserPreferencesActivity extends PreferenceActivity {
    private static final String TAG = "UserPreferencesActivity";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate hasHeaders: " + hasHeaders());
         getFragmentManager().beginTransaction().replace(android.R.id.content,
         new UserPreferencesFragment()).commit();
    }
/*
    public void onBuildHeaders(List<Header> target) {
        Log.i(TAG, "onBuildHeaders before load");
        loadHeadersFromResource(R.xml.preference_headers, target);
        Log.i(TAG, "onBuildHeaders after load");
    }
*/
    public static class UserPreferencesFragment extends PreferenceFragment {
        private final static String TAG = "UserPreferencesFragment";

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.i(TAG, "fragment onCreate");
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}    

感谢所有帮助我发现错误的人。

解放军

于 2012-07-14T14:58:22.563 回答
0

我想我在这一行中发现了错误:

android:fragment="com.hometelco.hfa.activities.UserPreferencesFragment" 

查看文档packaganame.preferenceactivity$preferencefragment,他们显示使用...的格式调用该行

我相信preferences_headers.xml 中的那一行应该是:

android:fragment="com.hometelco.hfa.activities.UserPreferencesActivity$UserPreferencesFragment"
于 2012-07-13T00:39:17.743 回答
-1

我认为你应该尝试:

addPreferencesFromResource(R.layout.preferences);

而不是:

addPreferencesFromResource(R.xml.preferences);

您还需要像这样称呼您的复选框:

     final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
     if (checkBox.isChecked()) {
         checkBox.setChecked(false);
     }

您应该在复选框中添加 ID。这是一个可能对您有所帮助的链接:

http://developer.android.com/reference/android/widget/CheckBox.html

于 2012-07-12T01:45:42.660 回答