2016-03-20 13 views
2

私は、nav drawerのトップロゴを、アプリケーションの最初の断片に戻すボタンとして機能させようとしていますが、ボタンをまったく機能させることはできません。単純なタスクでも、トーストのような。アプリを開くとアプリがクラッシュするので、ボタンを使ってみることさえできません。ナビゲーションドロワーのトップロゴをボタンとして正しく動作させるにはどうすればよいですか?

これは私が取得エラーです:

「nullオブジェクト参照上の仮想メソッド 『空android.widget.ImageButton.setOnClickListenerを(android.view.View $ OnClickListener』)呼び出すため試みを」のロゴXMLのImageButtonとして宣言されており、これはJavaコードです。

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 


public ImageButton logo; 

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

    //Set the initial fragment 
    MainFragment mainFragment = new MainFragment(); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, mainFragment); 
    fragmentTransaction.commit(); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 


    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 


    logo = (ImageButton) findViewById(R.id.main_icon); 
    logo.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      Toast toast = Toast.makeText(getApplicationContext(), "works", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    }); 
} 

答えて

0

を使用してください。

logo = (ImageButton) navigationView.getHeaderView(0).findViewById(R.id.main_icon); 

ViewImageButtonあるので、別の方法として、あなたはレイアウトエントリにonClick属性を設定し、ActivityにごonClick()方法を移動することができます。

<ImageButton android:id="@+id/main_icon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/your_logo" 
    android:onClick="onClick" /> 

このオプションを選択した場合は、setOnClickListener()呼び出しを削除してください。

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 
    ... 

    public void onClick(View v) { 
     Toast toast = Toast.makeText(getApplicationContext(), "works", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 
+1

これはそれです。文字通り15分前にそれを分かりましたが、とにかく感謝しています。私はXMLでonClick属性を設定することは考えていませんでしたが、これは私の考えではより組織化された方法のように思えるので使用しました。 – Shinr3x

0

ビューを作成する必要があります。あなたのImageButtonNavigationViewのヘッダにある、とNavigationViewは一つだけのヘッダViewを持っている、あなたはその上findViewById()を呼び出すことができると仮定すると、この

View view = navigationView.inflateHeaderView(R.layout.nav_header_main); 
logo = (ImageButton) view.findViewById(R.id.main_icon); 
+0

まだ動作しません。あなたが私に与えたビューは、同じ名前を持っていても、onClickコマンドのビューにリンクしません。あなたが思うコードの最後の部分を提供することはできますか? – Shinr3x

関連する問題