読者です 読者をやめる 読者になる 読者になる

ListDialogBuilder作ってみた

Android
AlertDialogでリスト表示させたい時に、AlertDialog.BuilderのsetItemが地味に使いにくかったので、ListDialogBuilderを作ってみた。
setItemの使いにくい点は、OnClickListenerでタップした位置が返ってきて、しかもそれがintで返ってくること。
正直、タップした項目をStringとかで返して欲しい!と思ってListDialogBuilderを作った。

適当に作ってこんな感じです
/**
*
* ListDialogBuilder
*
* @author s-okano
*/
public class ListDialogBuilder extends Builder {

private final Context mContext;

public ListDialogBuilder(Context context) {
super(context);
mContext = context;
}

/**
*
* ListDialogに表示する項目を設定
*
* @param items
* ListDialogに表示する項目の文字列配列
* @param listener
* リスト項目クリックリスナー
*/
public void setItems(final String[] items, final OnListDialogItemClickListener listener) {
setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String item = items[which];
listener.onClick(dialog, item);
}
});
}

/**
*
* リスト項目クリックリスナー
*
* @author s-okano
*/
public interface OnListDialogItemClickListener {

/**
*
* リスト項目タッチ時イベント
*
* @param dialog
* ダイアログ
* @param item
* タップしたリスト項目
*/
void onClick(DialogInterface dialog, String item);
}
}

使い方
final String[] items = {"aaaa","bbbb","cccc"};

ListDialogBuilder listDialogBuilder = new ListDialogBuilder(context);
listDialogBuilder.setItems(items, new OnListDialogItemClickListener(){

@Override
public void onClick(DialogInterface dialog, String item){
// Stringで返ってくるので、そのままViewとかにセット
textView.setText(item + "が選択されたよ!");
}
});
AlertDialog alertDialog = listDialogBuilder.create();
alertDialog.show();

ダイアログ系は自分が使いやすい形にする方が、後々便利。多分…。
もう少し色々やってみよう…。