0

Android4.0以降のアプリの設定画面を確立しようとしています。2つのチェックボックスを取得して表示することができませvibratePreferencesoundPreferenceUserPreferencesFragment私はこれまでインスタンス化するとは思わない。以下は関連するファイルです。私はこれを数晩続けていますが、何が欠けているのか理解できません。私は何を見ているのですか?

ありがとう、PLA

Preferences_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> 

Preferences.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);
        }
    }
}    

私のやり方の誤りを見つけるのを手伝ってくれたすべての人に感謝します。

PLA

于 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 に答える