Android 如何使导航抽屉中的顶部徽标正确地充当按钮?

Android 如何使导航抽屉中的顶部徽标正确地充当按钮?,android,android-fragments,Android,Android Fragments,我试图让导航抽屉的顶部标志充当一个按钮,让我回到应用程序的第一个片段,但我似乎根本无法让按钮工作,即使是简单的任务,比如祝酒。该应用程序在打开应用程序时崩溃,因此我甚至无法尝试使用该按钮 这就是我得到的错误:“尝试在空对象引用上调用虚拟方法'void android.widget.ImageButton.setOnClickListener(android.view.view$OnClickListener)'” 徽标在XML中声明为ImageButton,这是java代码: public cl

我试图让导航抽屉的顶部标志充当一个按钮,让我回到应用程序的第一个片段,但我似乎根本无法让按钮工作,即使是简单的任务,比如祝酒。该应用程序在打开应用程序时崩溃,因此我甚至无法尝试使用该按钮

这就是我得到的错误:“尝试在空对象引用上调用虚拟方法'void 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();
        }
    });
}

您必须创建视图。用这个

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

假设您的
ImageButton
位于
NavigationView
的标题中,并且
NavigationView
只有一个标题
View
,您可以在该标题上调用
findViewById()

logo = (ImageButton) navigationView.getHeaderView(0).findViewById(R.id.main_icon);
或者,由于
视图
是一个
图像按钮
,因此可以在布局条目上设置
onClick
属性,并将
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" />

还是不行。您给我的视图没有链接到onClick命令中的视图,即使它们具有相同的名称。你能提供你认为有效的代码的最后一部分吗?就是这样。15分钟前就想出来了,不过还是谢谢你。虽然我没有想到在XML中设置onClick属性,但我最终还是使用了它,因为在我看来它似乎是一种更有组织的方式。
public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
    ...

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