2016-07-21 3 views
1

@Fabricio PHの返信でthis questionを読んで、ActionBarにトグルボタンを作成しました。アクションバーのトグルボタンを処理できません

私はそれを行う彼の2番目の方法を試みた。それはアクションバーに表示されますが、私はそれに任意の属性を設定することはできません。

これは私のコードです:

main_menu.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> 

このメニュー項目のレイアウト:MainActivity.javaで

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> 

- >のonCreate ()、私はこのようなToggleButtonを呼び出したが、それはfindviewbyId()nullオブジェクトと言った。

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

Logcat:事前に

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) 

感謝。あなたのケースでは

+1

onCreateメニューにない 'それは言っfindviewbyId()はnull object.'あなたはlogcatから正確なエラーを投稿してくださいもらえますか? – Bobby

+0

私はlogcatを更新しました。ありがとう。 – TruongHieu

答えて

1

ToggleButtonあなたがonCreateOptionsMenu内でそれを受け取る必要がありますので

@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; 
} 
+0

これは動作しません。まだ 'void android.widget.ToggleButton.setChecked(boolean)'ヌルオブジェクトリファレンスで ' – TruongHieu

+0

@TruongHieu私は自分の答えを編集しています。それを確認してください –

+0

あなたの投稿の前に見つけました。私の答えがonPrepareOptionsMenuである間は、あなたはonCreateOptionsMenuでそれを宣言しています。とにかく動作します。 ご協力いただきありがとうございます。 – TruongHieu

関連する問題