0

私はにを持っておりEditPreferencePreferenceActivityユーザーにこの設定へのアクセスを許可するか、アラートを表示するかを指示する変数があります。

私の問題は、設定ダイアログが表示される前にキャンセルする方法と、アラートを表示する方法(変数による)が見つからなかったことです。

onClick設定またはでtrue/falseを返そうとしましonTreeClickたが、何も実行されませんでした。ダイアログは引き続き表示されます。

Android2.1以降の場合。

ありがとう。

4

1 に答える 1

2

DialogPreference.onClick()プリファレンス自体へのクリックを処理するは、であるため、独自のクラスメンバーprotectedでオーバーライドすることはできません。PreferenceActivity

ただし、必要なことを達成するためにクラスを拡張することができます。以下は非常にミニマリストの例です。

package com.example.test;

import android.content.Context;
import android.preference.EditTextPreference;
import android.util.AttributeSet;

public class MyEditTextPreference extends EditTextPreference {

    private Runnable alternative = null;

    public MyDatePickerDialog(Context context, 
            AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

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

    public void setAlternativeRunnable(Runnable runnable) {
        alternative = runnable;
    }

    // this will probably handle your needs
    @Override
    protected void onClick() {
        if (alternative == null) super.onClick();
        else alternative.run();
    }

}

XMLファイル内:

<com.example.test.MyEditTextPreference
        android:key="myCustom"
        android:title="Click me!" />

あなたのPreferenceActivity

MyEditTextPreference pref = (MyEditTextPreference) this.findPreference("myCustom");
pref.setAlternativeRunnable(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplication(), "Canceled!", Toast.LENGTH_SHORT)
                .show();
    }
});

最後に、やりたいことが見つからない場合は、Androidクラス自体がどのように機能するかを確認することを検討してください。ほとんどの場合、彼らはあなたが望むものを達成するための良い洞察をあなたに与えるでしょう。

この場合、それDialogInterface.onClick()は上記の方法です。したがって、それを達成するには、なんらかの方法でオーバーライドする必要があることがわかります。この場合、解決策はEditTextPreferenceクラス自体を拡張することです。

于 2012-07-21T15:37:37.690 に答える