如何在 Android 中使用切换按钮启用和禁用 toast?
How to enable and disable toast with toggle button in Android?
我有切换按钮,对某些功能很有用。但是当我用于吐司时,切换按钮是空指针。
这是我的代码:
if (tgbutton.isChecked()) {
Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
当使用没有切换按钮的 toast 时,应用程序运行良好,但当我使用带有切换按钮的 toast 时,应用程序崩溃了。
如何使用带有切换按钮的toast?
谢谢
编辑:
来自logcat:
05-20 21:59:07.568: E/AndroidRuntime(26777): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mygames.testpackage2/com.testpackage.challenge.CH__QuestionActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.access0(ActivityThread.java:147)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.os.Handler.dispatchMessage(Handler.java:102)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.os.Looper.loop(Looper.java:135)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.main(ActivityThread.java:5253)
05-20 21:59:07.568: E/AndroidRuntime(26777): at java.lang.reflect.Method.invoke(Native Method)
05-20 21:59:07.568: E/AndroidRuntime(26777): at java.lang.reflect.Method.invoke(Method.java:372)
05-20 21:59:07.568: E/AndroidRuntime(26777): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
05-20 21:59:07.568: E/AndroidRuntime(26777): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
05-20 21:59:07.568: E/AndroidRuntime(26777): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference
05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.displayQuestion(CH__QuestionActivity.java:613)
05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.displayNextQuestion(CH__QuestionActivity.java:554)
05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.onCreate(CH__QuestionActivity.java:218)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.Activity.performCreate(Activity.java:5975)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
05-20 21:59:07.568: E/AndroidRuntime(26777): ... 10 more
我认为问题出在您传递给 toast 的上下文。
if (tgbutton.isChecked()) {
Toast.makeText(this, "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
或者如果你在片段中,
if (tgbutton.isChecked()) {
Toast.makeText(getContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
确保从 UI 线程调用它。
祝你好运
埃姆雷
tgButton
未初始化。确保它被初始化:
ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id);
堆栈跟踪显示您的 tgbutton 是 null
。
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference 05-20 21:59:07.568: E/AndroidRuntime(26777)
您应该更正两件事:
1) 请确保绑定您的视图。
ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id);
2) 使用前务必检查null
:
if (null != tgbutton && tgbutton.isChecked()) {
Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
解决方法:-
ToggleButton tb;
tb = (ToggleButton)findViewById(R.id.toggle_button_id);
if(tb.equals("ON") {
Toast.makeText(getApplicationContext(), "Message", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Else Part", Toast.LENGTH_LONG).show();
}
干杯!!
P.S :我认为,对 ToggleButton 使用 isChecked()
不是一个好习惯。
从 logcat 的报告中您可能会发现 ToggleButton 只有布尔值
个选项(打开或关闭)。所以你不需要用isChecked()
函数来验证。
我有切换按钮,对某些功能很有用。但是当我用于吐司时,切换按钮是空指针。
这是我的代码:
if (tgbutton.isChecked()) {
Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
当使用没有切换按钮的 toast 时,应用程序运行良好,但当我使用带有切换按钮的 toast 时,应用程序崩溃了。
如何使用带有切换按钮的toast?
谢谢
编辑:
来自logcat:
05-20 21:59:07.568: E/AndroidRuntime(26777): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mygames.testpackage2/com.testpackage.challenge.CH__QuestionActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.access0(ActivityThread.java:147) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.os.Handler.dispatchMessage(Handler.java:102) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.os.Looper.loop(Looper.java:135) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.main(ActivityThread.java:5253) 05-20 21:59:07.568: E/AndroidRuntime(26777): at java.lang.reflect.Method.invoke(Native Method) 05-20 21:59:07.568: E/AndroidRuntime(26777): at java.lang.reflect.Method.invoke(Method.java:372) 05-20 21:59:07.568: E/AndroidRuntime(26777): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 05-20 21:59:07.568: E/AndroidRuntime(26777): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 05-20 21:59:07.568: E/AndroidRuntime(26777): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference 05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.displayQuestion(CH__QuestionActivity.java:613) 05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.displayNextQuestion(CH__QuestionActivity.java:554) 05-20 21:59:07.568: E/AndroidRuntime(26777): at com.testpackage.challenge.CH__QuestionActivity.onCreate(CH__QuestionActivity.java:218) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.Activity.performCreate(Activity.java:5975) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 05-20 21:59:07.568: E/AndroidRuntime(26777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 05-20 21:59:07.568: E/AndroidRuntime(26777): ... 10 more
我认为问题出在您传递给 toast 的上下文。
if (tgbutton.isChecked()) {
Toast.makeText(this, "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
或者如果你在片段中,
if (tgbutton.isChecked()) {
Toast.makeText(getContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
确保从 UI 线程调用它。
祝你好运
埃姆雷
tgButton
未初始化。确保它被初始化:
ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id);
堆栈跟踪显示您的 tgbutton 是 null
。
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference 05-20 21:59:07.568: E/AndroidRuntime(26777)
您应该更正两件事:
1) 请确保绑定您的视图。
ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id);
2) 使用前务必检查null
:
if (null != tgbutton && tgbutton.isChecked()) {
Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show();
}
解决方法:-
ToggleButton tb;
tb = (ToggleButton)findViewById(R.id.toggle_button_id);
if(tb.equals("ON") {
Toast.makeText(getApplicationContext(), "Message", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Else Part", Toast.LENGTH_LONG).show();
}
干杯!!
P.S :我认为,对 ToggleButton 使用 isChecked()
不是一个好习惯。
从 logcat 的报告中您可能会发现 ToggleButton 只有布尔值
个选项(打开或关闭)。所以你不需要用isChecked()
函数来验证。