2013年10月7日月曜日

ListDialogBuilder作ってみた

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();

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

0 件のコメント:

コメントを投稿