ユーザーに1つだけ選んでもらう際に利用されます。
個人的にはラジオボタンは好きではないのですが、
そういう事を言うと
「システムの人って、本当に面倒くさい!!」
とか思われそうなので、心にしまっています。
はい。
ラジオボタン生成の仕方は
RadioButton oRadioBtn = new RadioButton(this);
さらに
//ラジオボタンにIDを設定
oRadioBtn.setId(int);
//ラジオボタンに文字列を設定
oRadioBtn.setText(String);
idを設定することにより、一意に認識することができるようになり、
setTextで表示する文字列を設定できます。
こんな感じでOKです。
ただ、生成時の引数thisをgetApplicationContext()にする
とsetTextの文字が画面に表示されませんでした。。
壊れかけのラジオボタン!!
ラジオボタンの生成はこれで大丈夫なのですが、
複数のラジオボタンを束ねるマネージャー的な
oRadiGropを利用します。
//生成
RadioGroup oRadiGrop = new RadioGroup(getApplicationContext());
//チェック時の処理を通知させる
oRadiGrop.setOnCheckedChangeListener();
//ラジオグループにラジオボタンを追加
oRadiGrop.addView(RadioButton, LayoutParams);
ラジオグループを作成して、そこに各ラジオボタンを追加するイメージです。
また、生成時に引数をgetApplicationContext()にしてますが、今のところ
問題ありません。笑
■サンプルソース
package com.example.sample; import android.os.Bundle; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; import android.app.Activity; public class MainActivity extends Activity implements OnCheckedChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウトの生成 LinearLayout layout=new LinearLayout(getApplicationContext()); //上から下にオブジェクトを配置するよう設定 layout.setOrientation(LinearLayout.VERTICAL); //レイアウトパラム定数(縦横の長さの定数)の格納 int WC = ViewGroup.LayoutParams.WRAP_CONTENT; //レイアウトの横幅・縦幅を設定 LayoutParams oLayPar = new LinearLayout.LayoutParams(WC, WC); //画面表示の設定 setContentView(layout); //ラジオグループの登録 RadioGroup oRadiGrop = new RadioGroup(getApplicationContext()); //チェック時の処理を通知させる oRadiGrop.setOnCheckedChangeListener(this); //ラジオグループにラジオボタンを追加 oRadiGrop.addView(Make_RadioButton(0,"ON"), oLayPar); oRadiGrop.addView(Make_RadioButton(1,"OFF"), oLayPar); //ラジオグループをレイアウトに追加 layout.addView(oRadiGrop, oLayPar); } @Override public void onCheckedChanged(RadioGroup oRG, int Id) { //無選択状態のidは-1 if (Id ==-1)return; //IDに紐づくテキストを取得 String sText = String.valueOf(((RadioButton)findViewById(Id)).getText()); //現在チェックされているラジオボタンのidを取得 int iActiveID = oRG.getCheckedRadioButtonId(); //選択されたIDに紐づくテキストを表示 Toast.makeText(getApplicationContext(), sText ,Toast.LENGTH_SHORT).show(); //アクティブなIDを表示 Toast.makeText(getApplicationContext(), String.valueOf(iActiveID),Toast.LENGTH_SHORT).show(); } private RadioButton Make_RadioButton(int id, String sTitle){ //ラジオボタンの生成 RadioButton oRadioBtn = new RadioButton(this); //ラジオボタンにIDを設定 oRadioBtn.setId(id); //ラジオボタンに文字列を設定 oRadioBtn.setText(sTitle); //ラジオボタンを返す return oRadioBtn; } }■実行結果
onCheckedChanged関数内の
String sText = String.valueOf(((RadioButton)findViewById(Id)).getText());
こちらの処理はチェックされている文字列を取得しています。
第2関数のIDから、ラジオボタンを探して、そのラジオボタンに設定されているテキスト
を取得して、文字列で返しています。
//現在チェックされているidを取得
String sText = String.valueOf(((RadioButton)findViewById(Id)).getText());
こちらの処理はチェックされている文字列を取得しています。
第2関数のIDから、ラジオボタンを探して、そのラジオボタンに設定されているテキスト
を取得して、文字列で返しています。
//現在チェックされているidを取得
int iActiveID = oRG.getCheckedRadioButtonId();
こちらの処理はリスナー内で読んでいますが、リスナー外でも全然呼べます。
なので、現在の状態が知りたいときにサクッと呼んでください。
//チェック時の処理を通知させる
oRadiGrop.setOnCheckedChangeListener(this);
また、今回はチェックされたときにimplementのメッソッドが呼ばれていますが、
他にも実装方法はたくさんあるので、いろいろ試してみてください。
話は戻りますが、AndroidのViewパーツを生成時にthisを渡すのがいいのでしょうか??
0 件のコメント:
コメントを投稿