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