2

設定の 1 つがクリックされたときに Web サイトを開こうとしています (設定がないため、設定が実際に変更されたときではありません)。

問題は、onPreferenceClick()が呼び出されないことです。

これは私のPreferenceActivityです:

public class About extends PreferenceActivity implements
        OnPreferenceClickListener {

TextView tv_developer;
TextView tv_version;
String versionName;

int counter = 0;

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

        addPreferencesFromResource(R.xml.about);        

        Preference p_developer = (Preference) findPreference("p_developer");
        p_developer.setOnPreferenceClickListener(this);

        Preference p_licences = (Preference) findPreference("p_licences");
        p_licences.setOnPreferenceClickListener(this);



    }

    @Override
    public boolean onPreferenceClick(Preference pref) {
        // TODO Auto-generated method stub

        Log.i("Anything pressed", "YES");
        if (pref.getKey().equals("p_developer")) {
            Log.i("p_developer", "YES");


        } else {
            Log.i("p_developer", "NO");
        }
        return true;
    }   
}

これはxmlです:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="about"
    android:title="About" >


    <Preference
        style="?android:preferenceInformationStyle"
        android:key="p_licences"
        android:title="p_licences" />

    <PreferenceCategory android:title="Category" >

        <Preference
            style="?android:preferenceInformationStyle"
            android:key="p_developer"
            android:title="p_developer" />

    </PreferenceCategory>

</PreferenceScreen>

また、これも何もしないことがわかりました:

<Preference android:title="@string/prefs_web_page" >
    <intent android:action="android.intent.action.VIEW"
            android:data="http://www.example.com" />
</Preference>
4

4 に答える 4

3

android:enabled="true"に追加Preference:

<Preference
    style="?android:preferenceInformationStyle"
    android:key="p2"
    android:enabled="true"
    android:title="p2" />
于 2013-09-14T10:15:29.183 に答える
1

あなたが使用している:

 PreferenceActivity.addPreferencesFromResource(R.layout.about);

それはもっと似ているべきではありません:

 PreferenceActivity.addPreferencesFromResource(R.xml.yourxmlfilename);

定義した設定はレイアウトではないためです。.xmlの設定のキーではなく、.xml ファイルの名前 をロードする必要があります。

したがって、設定 .xml ファイルを「xml」フォルダーに置き、「mypreferences.xml」のような名前を付けます。次に、次のようにロードします。

PreferenceActivity.addPreferencesFromResource(R.xml.mypreferences);

私のプロジェクトでは、ファイルは次のようになります: (name "settings.xml")

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="Your Settings" >
            <Preference
            android:key="delete"
            android:title="Delete User"
            android:summary="Deletes the user." />

      <!-- and so on -->

次のように呼び出して、PreferenceActivity に追加します。

PreferenceActivity.addPreferencesFromResource(R.xml.settings);

そして、onClickListener を設定します。

Preference deletePref = (Preference) findPreference("delete");
        deletePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
                // do stuff
                return true;
            }
        });

そして、それは機能します。

さらに、タイトルとキーに別の名前を使用してみてください。

于 2013-09-03T09:29:26.230 に答える
0

ここで新鮮な答え。

最初にリスナーを宣言する必要があります。そして、エンド Preference オブジェクトのそれぞれ (!) にそのリスナーをアタッチします。次のように:

    final static int CAMERA_SLEEP_TIME=0,
                CAMERA_TIME=1,
                RESET=2;

private Preference.OnPreferenceClickListener listener =new Preference.OnPreferenceClickListener(){
    @Override
    public boolean onPreferenceClick(Preference preference) {
        String keyLcl = preference.getKey();
       if(keyLcl.equals(cameraSleepTime))
           triggerPrefsDialog(CAMERA_SLEEP_TIME);
        else
       if (keyLcl.equals(cameraTime))
           triggerPrefsDialog(CAMERA_TIME);
        else
       if (keyLcl.equals(reset))
           triggerPrefsDialog(RESET);
        else
       return false;
        return true;

    }


};
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    Resources resLcl = getResources();
    cameraSleepTime=resLcl.getString(R.string.camera_sleep_time);
    cameraTime=resLcl.getString(R.string.camera_time);
    reset =resLcl.getString(R.string.reset);
    PreferenceScreen sceenLcl = getPreferenceScreen();
    PreferenceCategory pcLcl=(PreferenceCategory)sceenLcl.getPreference(1);
    pcLcl.getPreference(0).setOnPreferenceClickListener(listener);
    pcLcl.getPreference(1).setOnPreferenceClickListener(listener);
    pcLcl=(PreferenceCategory)sceenLcl.getPreference(2);
    pcLcl.getPreference(0).setOnPreferenceClickListener(listener);
    l.a(pcLcl.getTitle());
}

関連する Preferences.xml:

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

<PreferenceCategory

    android:title="@string/switch_mode">

    <CheckBoxPreference
        android:key="@string/enable_switch"
        android:defaultValue="true"
        android:gravity="center"
        android:title="@string/is_switched"

        />
</PreferenceCategory>
<PreferenceCategory

    android:title="@string/seconds_category">
    <Preference
        android:key="@string/camera_time"

        android:defaultValue="600000"
        android:title="@string/camera_time"
        />
    <Preference
        android:key="@string/camera_sleep_time"
        android:defaultValue="600000"
        android:title="@string/camera_sleep_time"
        />
</PreferenceCategory>
<PreferenceCategory
    android:title="@string/System">
    <Preference
        android:key="@string/reset"
        android:defaultValue="false"
        android:title="@string/reset"
        />
</PreferenceCategory>
<PreferenceCategory
    android:title="@string/to_be_added">
</PreferenceCategory>

于 2016-08-16T17:04:34.733 に答える
0

PreferenceCategory私にとっての解決策は、 (サポート ライブラリ内の) 既存のクラスを拡張してオーバーライドすることisEnabled()でした。このメソッドは常に返さfalseれるので、というクラスを作成してClickablePreferenceCategoryに変更しましたtrue

それに加えandroid:selectable="true"て、カスタム設定 xml ノードに追加する必要がありました。結果は次のようになります。

<PreferenceCategory
    android:enabled="true"
    android:key="@string/key_category_problem_solving"
    android:selectable="true"
    android:title="@string/problem_solving">

</PreferenceCategory>

そしてClickablePreferenceCategory

public class ClickablePreferenceCategory extends PreferenceCategory {

    public ClickablePreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public ClickablePreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public ClickablePreferenceCategory(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ClickablePreferenceCategory(Context context) {
        super(context);
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}
于 2016-12-06T13:45:03.890 に答える