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
クラス自体を拡張することです。