ユーザーに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 件のコメント:
コメントを投稿