2016-11-07 23 views
0

ImageButtonとしてBackarrowを使用してcostumツールバーを作成しました。私はこのボタンへの参照を取得したいが、常にNullを返します。 2時間前にそれは働いたが、私はコードを変更し、今何が間違っているかわからない。あなたが私を助けることができれば素晴らしいだろう!ImageButton.setOnClickListenerでNULLポインタ例外が発生しました

MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

// Always cast your custom Toolbar here, and set it as the ActionBar. 
Toolbar tb = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(tb); 

// Get the ActionBar here to configure the way it behaves. 
ActionBar ab = getSupportActionBar(); 
//ab.setHomeAsUpIndicator(R.drawable.ic_menu); // set a custom icon for the default home button 
ab.setDisplayShowHomeEnabled(true); // show or hide the default home button 
ab.setDisplayHomeAsUpEnabled(true); 
ab.setDisplayShowCustomEnabled(true); // enable overriding the default toolbar layout 
ab.setDisplayShowTitleEnabled(true); // disable the default title element here 

ImageButton backar = (ImageButton) findViewById(R.id.backarrow); 
backar.setOnClickListener(this); 
backar.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View arg0) 
    { 
     MainActivity.super.onBackPressed(); 
    } 
}); 

activity_main.xml

?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.marc.stadtcoach.FreeActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="56dp" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 
    </android.support.design.widget.AppBarLayout> 

    <RelativeLayout 
     android:id="@+id/activity_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FFFFFF" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="com.example.marc.stadtcoach.MainActivity"> 

     <Button 
      android:id="@+id/zeitspiel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="30dp" 
      android:background="@drawable/lockedroundbutton" 
      android:text="Zeitspiel" 
      android:textColor="#FFFFFF" 
      android:layout_below="@+id/spiel" 
      android:layout_alignLeft="@+id/spiel" 
      android:layout_alignStart="@+id/spiel" 
      android:layout_alignRight="@+id/spiel" 
      android:layout_alignEnd="@+id/spiel" /> 

     <Button 
      android:id="@+id/statistik" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="26dp" 
      android:background="@drawable/roundbutton" 
      android:text="Statistik" 
      android:textColor="#FFFFFF" 
      android:layout_below="@+id/zeitspiel" 
      android:layout_alignLeft="@+id/spiel" 
      android:layout_alignStart="@+id/spiel" 
      android:layout_alignRight="@+id/zeitspiel" 
      android:layout_alignEnd="@+id/zeitspiel" /> 


     <TextView 
      android:id="@+id/coinView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="0" 
      android:textSize="16dp" 
      android:layout_alignBottom="@+id/imageView1" 
      android:layout_alignRight="@+id/spiel" 
      android:layout_alignEnd="@+id/spiel" /> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/coin" 
      android:layout_marginRight="10dp" 
      android:layout_marginEnd="10dp" 
      android:layout_alignParentTop="true" 
      android:layout_toLeftOf="@+id/coinView" 
      android:layout_toStartOf="@+id/coinView" /> 

     <Button 
      android:id="@+id/spiel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="108dp" 
      android:background="@drawable/startbutton" 
      android:text="Lernspiel" 
      android:textColor="#FFFFFF" 
      android:layout_below="@+id/coinView" 
      android:layout_centerHorizontal="true" /> 
    </RelativeLayout> 

</android.support.design.widget.CoordinatorLayout> 

costumツールバーmenu_back.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:layout_scrollFlags="scroll|enterAlways" 
    app:layout_collapseMode="pin"> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent">   

     <!-- This is a custom left side button --> 
     <ImageButton 
      android:id="@+id/backarrow" 
      android:layout_width="?attr/actionBarSize" 
      android:layout_height="?attr/actionBarSize" 
      android:layout_marginRight="?attr/actionBarSize" 
      android:layout_gravity="start|center_vertical" 
      android:visibility="visible" 
      android:src="@drawable/backarrow" 
      style="@style/Widget.AppCompat.ActionButton" /> 

    </FrameLayout> 
</android.support.v7.widget.Toolbar> 

そして最後にエラーメッセージ

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.marc.stadtcoach, PID: 386 
        Theme: themes:{default=overlay:grovelet.s7.galaxys7.galaxy.launcher.theme, iconPack:grovelet.s7.galaxys7.galaxy.launcher.theme, fontPkg:grovelet.s7.galaxys7.galaxy.launcher.theme, com.android.systemui=overlay:grovelet.s7.galaxys7.galaxy.launcher.theme, com.android.systemui.navbar=overlay:grovelet.s7.galaxys7.galaxy.launcher.theme} 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.marc.stadtcoach/com.example.marc.stadtcoach.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 
         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5461) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
         at com.example.marc.stadtcoach.MainActivity.onCreate(MainActivity.java:44) 
         at android.app.Activity.performCreate(Activity.java:6251) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 
         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5461) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
I/Process: Sending signal. PID: 386 SIG: 9 
Application terminated. 

問題は、私のMainActivity.javaで

ImageButton backar = (ImageButton) findViewById(R.id.backarrow); 

がnullを返すということです。

私を助けることができる人がいれば、私はとても幸せです!

+0

ツールバーにカスタムアイコンを追加するには、onCreateOptionsMenuとonOptionsItemSelectedをオーバーライドする方がよいでしょう。私はこの方法を使用して、それは完璧に動作します..疑問がある場合は私に尋ねる。 – vishnumm93

答えて

0

画像ボタンはツールバーのレイアウト内にあります。ツールバー内で画像ボタンを見つけようとします。 ImageButton backar =(ImageButton)tb.findViewById(R.id.backarrow); 最初にツールバーのframelayoutを取得し、そこから画像ボタンを取得します。

関連する問題