トグルボタンを使用してアプリケーションを開発しています。EditText
に1または0を入力しました。ボタンがクリックされたときに、1を入力すると、トグルボタンはTOGGLE ON
、0を入力すると、トグルボタンにTOGGLE OFF
。ボタンがクリックされたときにトグル値を取得できません。
私のコードは:
public class MainActivity extends Activity {
String editString="";
Button btn;
EditText ed;
ToggleButton toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
ed = (EditText)findViewById(R.id.ed);
toggle = (ToggleButton)findViewById(R.id.toggBtn);
editString = ed.getText().toString();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle.toggle();
if(editString.equals("1")){
toggle.setTextOff("TOGGLE ON");
}
else if(editString.equals("0")){
toggle.setTextOn("TOGGLE OFF");
}
}
});
}
}
xmlファイル:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
Android:orientation="vertical">
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/ed"/>
<Button Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/btn"
Android:text="Summit"/>
<ToggleButton
Android:id="@+id/toggBtn"
Android:layout_below="@+id/text6"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
/>
クリックリスナからtoggle.toggle();
行を削除するだけで、toggle()
メソッドは常にトグルボタンの値をリセットします。
また、文字列変数でEditText
の値を取得しようとしているので、onCreate()
で値を取得するのと常に同じなので、EditText
を直接使用してonClick
リスナーでのその値。
すぐに動作するようにコードを変更してください。
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//toggle.toggle();
if ( ed.getText().toString().equalsIgnoreCase("1")) {
toggle.setTextOff("TOGGLE ON");
toggle.setChecked(true);
} else if ( ed.getText().toString().equalsIgnoreCase("0")) {
toggle.setTextOn("TOGGLE OFF");
toggle.setChecked(false);
}
}
});
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textOn="Vibrate on"
Android:textOff="Vibrate off"
Android:onClick="onToggleClicked"/>
このレイアウトをホストするアクティビティ内で、次のメソッドがクリックイベントを処理します。
public void onToggleClicked(View view) {
// Is the toggle on?
boolean on = ((ToggleButton) view).isChecked();
if (on) {
// Enable vibrate
} else {
// Disable vibrate
}
}
Googleガイドに従う必要があります。
ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// The toggle is enabled
} else {
// The toggle is disabled
}
}
});
ドキュメントを確認できます here
このトグルボタンを試してください
test_activity.xml
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="100px"
Android:layout_height="50px"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true"
Android:onClick="toggleclick"/>
Test.Java
public class Test extends Activity {
private ToggleButton togglebutton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
}
public void toggleclick(View v){
if(togglebutton.isChecked())
Toast.makeText(TestActivity.this, "ON", Toast.LENGTH_SHORT).show();
else
Toast.makeText(TestActivity.this, "OFF", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
editString = ed.getText().toString();
if(editString.equals("1")){
toggle.setTextOff("TOGGLE ON");
toggle.setChecked(true);
}
else if(editString.equals("0")){
toggle.setTextOn("TOGGLE OFF");
toggle.setChecked(false);
}
}
これを動かして
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
editString = ed.getText().toString();
onClick
の中
また、toogleボタンの状態は、0
または1
http://developer.Android.com/guide/topics/ui/controls/togglebutton.html
例:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="20dp"
Android:text="Button" />
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="26dp"
Android:ems="10" >
<requestFocus />
</EditText>
<Switch
Android:id="@+id/switch1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="51dp"
Android:text="Switch" />
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@+id/button1"
Android:layout_below="@+id/switch1"
Android:layout_marginTop="58dp"
Android:onClick="onToggleClicked"
Android:textOff="Vibrate off"
Android:textOn="Vibrate on" />
</RelativeLayout>
MainActivity.Java
public class MainActivity extends Activity implements OnClickListener {
EditText ed;
Switch sb;
ToggleButton tb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed = (EditText) findViewById(R.id.editText1);
Button b = (Button) findViewById(R.id.button1);
sb = (Switch)findViewById(R.id.switch1);
tb = (ToggleButton)findViewById(R.id.togglebutton);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String s = ed.getText().toString();
if(s.equals("1")){
tb.setText("TOGGLE ON");
tb.setActivated(true);
sb.setChecked(true);
}
else if(s.equals("0")){
tb.setText("TOGGLE OFF");
tb.setActivated(false);
sb.setChecked(false);
}
}
}
スナップ
1がオプションの1つが選択され、0が他のオプションである場合、試みていることはラジオボタンと意味的に同じだと思います。
Androidデフォルトで提供されるラジオボタンを使用することをお勧めします。
使用方法はこちらです http://www.mkyong.com/Android/android-radio-buttons-example/
およびAndroidドキュメントはこちら-
http://developer.Android.com/guide/topics/ui/controls/radiobutton.html
ありがとう。