2013年1月10日木曜日

選択型ダイアログ(setSingleChoiceItems)


ダイアログの作成の応用といいますか、
他のタイプのダイアログとの併用の仕方に
ついて、紹介いたします。

とりあえず、サンプルのソースはこちら

package com.example.dialog;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.app.Activity;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;


public class MainActivity extends Activity implements OnClickListener{
    //選択結果を保存す
    private int result_item = 0;
    //選択欄の配列
    private String[] aItems = {"りんご","バナナ","マンゴー"};
    //レイアウトの定数を変数に格納
    private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        //上から下にオブジェクトを配置するよう設定
        layout.setOrientation(LinearLayout.VERTICAL);
        //画面表示の設定
        setContentView(layout);            
        
        //ボタンを作成します(押下すると普通のダイアログ出現)
  //ボタンを画面に追加する
  layout.addView(makeButton("普通のダイアログ", 0));
  layout.addView(makeButton("選択型のダイアログ", 1));
    }

    //ボタンを作成します
    private Button makeButton(String sText,int id) {
        Button button=new Button(this);
        //ボタンの表示テキストの設定
        button.setText(sText);
        //ボタンのIDの割り振り
        button.setId(id);
        //クリックリスナーの実装
        button.setOnClickListener(this);
        //ボタンの表示方法の設定
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        return button;
    }
    
    //クリック時に呼ばれるよ
    public void onClick(View view) {
        //押下されたダイアログのIDを取得
        showDialog(view.getId());
    }
    
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case 0:
                return CreateDialog("タイトル", "メッセージ", id);
            case 1:
                return CreateDialog("選択型", null, id);
            default:
                return null;
       }
    }

    private Dialog CreateDialog(String titleId, String messageId, int id) {
        //アラートダイアログを生成
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        //ダイアログにタイトルを設定
        dialog.setTitle(titleId);
        //nullの時は本文を表示しない対応
        if (messageId != null)dialog.setMessage(messageId);
        dialog.setIcon(R.drawable.icon);
        switch (id) {
        case 0:
            // dialogOKボタン
            dialog.setPositiveButton("OK",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    removeDialog(0);
                }
            });
            // dialogキャンセルボタン
            dialog.setNegativeButton("キャンセル",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            break;
        case 1:
            //選択型ダイアログ
            dialog.setSingleChoiceItems(aItems, result_item, new DialogInterface.OnClickListener(){
    public void onClick(DialogInterface dialog, int which) {
                    result_item = which;
                }
            });
            //OKボタン押下時
            dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichid) {
                  Toast.makeText(getApplicationContext(), aItems[result_item], Toast.LENGTH_LONG).show();
                    }
});
            break;
        default:
}
        return dialog.create();
    }
}


実行結果は

普通のダイアログボタンを押下すると


選択型のダイアログボタンを押下すると


OKボタン押下後は


のようになります。

押下するボタンにあわせて
出現させるダイアログを変更させています。

また、選択型ダイアログとは
複数の項目から、1つのアイテムをチェックする
ダイアログの事です。

何か、もっとわかりやくて、世間に浸透している名称
とか、あるのでしょうか??

チェックボックス型でもないし。。。


何かご存じの方はお手数ですがご連絡ください。



本題にもどすと、
showDialogの作成方法は前回の通りで、
違いは、
if (messageId != null)dialog.setMessage(messageId);
です。

ダイアログの本文に表示するテキストがない場合には、
本文に表示しないようにしております。

選択型のダイアログは本文があると、うまく表示できないので、
このような措置を取っております。

dialog.setSingleChoiceItems(aItems, result_item,new DialogInterface.OnClickListener(){

第1引数が表示するアイテムリストで、
第2引数が初期に選択されるアイテムです。

最後に選択したアイテムを初期表示にすることにより、
ユーザーが以前何を選択していたのかをわかるようにしています。


以上です。


簡単に作れるダイアログ特集でした。

0 件のコメント:

コメントを投稿