FC2ブログ

[Android] DialogPreferenceのデフォルトのボタン押下時の処理を実装したい

DialogPreference の中を見ると、setPositiveButtonText() や setNegativeButtonText() といったボタンのラベルを指定するメソッドは用意されているようなのですが、setOnClickLisnerといったようなボタン押下時の処理を実装する部品が見当たりません。

そこで、DialogPreference を継承したクラスで自前で ClickListener を用意してみました。

public class CustomDialogPreference extends DialogPreference {

public static interface PositiveButtonListener {
public void onPositiveBtnClick();
}

private PositiveButtonListener mPositiveButtonListener = null;

/**
* コンストラクタ.
*/
public CustomDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}

/**
* コンストラクタ.
*/
public CustomDialogPreference(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}

/**
* POSITIVEボタン押下時のリスナーを設定する
*/
public void setPositiveButtonListener(PositiveButtonListener listener) {
mPositiveButtonListener = listener;
}

/**
* クリック時の処理
*/
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
// POSITIVEボタン押下の場合、setPositiveButtonListenerで実装した
// クリック時の処理を実行する
if (mPositiveButtonListener != null) {
mPositiveButtonListener.onPositiveBtnClick();
}
}
}

}


インタフェースを用意して、onClickで実装された処理を呼び出すだけで意外と単純な仕組みでできました。

上記インタフェースを実装して、セットする処理は以下のような感じです。

public class SamplePrefActivity extends PreferenceActivity {

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.sample);

CustomDialogPreference edp = (CustomDialogPreference) findPreference("p_key");
edp.setPositiveButtonListener(new CustomDialogPreference.PositiveButtonListener() {

@Override
public void onPositiveBtnClick() {
Log.d("TEST", "onPositiveBtnClick !!");
}

});

}

}


POSITIVEボタンが押下されたときに、ちゃんとログが出力されました。



コメントの投稿

非公開コメント

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter