gpt4 book ai didi

android - 无法处理操作栏上的切换按钮

转载 作者:行者123 更新时间:2023-11-30 01:10:12 24 4
gpt4 key购买 nike

我已阅读@Fabricio PH 在 this question 中的回复在 ActionBar 上制作一个切换按钮。

然后我尝试了他的第二种方法。它显示在操作栏上,但我无法在其上设置任何属性。

这是我的代码:

主菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:radastaff="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/gps_toggle"
android:title="GPS Toggle"
radastaff:showAsAction="always"
radastaff:actionLayout="@layout/actionbar_layout_toggle"
/>
</menu>

此菜单项的布局:

action_bar_layout_toggle.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ToggleButton
android:id="@+id/actionbar_gps_toggle"
android:layout_width="71dp"
android:layout_height="30dp"
android:textOn=""
android:textOff=""
android:background="@drawable/gps_status_png"
android:layout_marginRight="20dp"/>
</RelativeLayout>

在 MainActivity.java -> onCreate() 中,我这样调用了一个 ToggleButton,但它说 findviewbyId() 为空对象。

ToggleButton toggle = (ToggleButton)findViewById(R.id.actionbar_gps_toggle);
toggle.setChecked(true);

日志:

07-21 17:03:25.926 8914-8914/com.rada.radastaff E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rada.radastaff, PID: 8914
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rada.radastaff/com.rada.radastaff.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ToggleButton.setChecked(boolean)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
at android.app.ActivityThread.access$800(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5253)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ToggleButton.setChecked(boolean)' on a null object reference
at com.rada.radastaff.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:5975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
at android.app.ActivityThread.access$800(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5253)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)

提前致谢。

最佳答案

在您的情况下,ToggleButton 在菜单中,因此您应该在 onCreateOptionsMenu 而不是 onCreate 中接收它

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_search, menu);

MenuItem item = menu.findItem(R.id.gps_toggle);
// get the root layout of your menu item, in your case it is RelativeLayout
RelativeLayout rootView = (RelativeLayout)item.getActionView();
// get the ToggleButton in RelativeLayout
ToggleButton = (ToggleButton) rootView.findItem(R.id.actionbar_gps_toggle);

return true;
}

关于android - 无法处理操作栏上的切换按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38500967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com