我正在开发和提供用户注册和登录的Android应用程序。在导航抽屉中,我为登录和注册添加了两个TextView。 但是,无论我为这些TextViews放置OnClickListener,都会出错:
尝试在空对象引用上调用虚方法'void android.view.View.setOnClickListener(android.view.View $ OnClickListener)'
请检查此图片,TextViews位于导航栏顶部
帮助。谢谢
已编辑代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
child=menu.findItem(R.id.action_cart).getActionView();
count_tv=(TextView)child.findViewById(R.id.cart_count_tv);
g=Globals.getInstance();
NavigationView navigationView=
(NavigationView)findViewById(R.id.nav_view);
View headerView=navigationView.getHeaderView(0);
TextView username=(TextView)findViewById(R.id.usernameNavBar);
TextView email=(TextView)findViewById(R.id.emailNavBar);
withLogin=(FrameLayout)findViewById(R.id.login_frame_layout);
wdoutLogin=(LinearLayout)findViewById(R.id.not_login_frame_layout);
if(g.loginstatus==true) {
withLogin.setVisibility(View.VISIBLE);
username.setText("name");
email.setText("email");
}else {
wdoutLogin.setVisibility(View.VISIBLE);
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(HomeActivity.this, "Login button pressed", Toast.LENGTH_SHORT).show();
}
});
}
答案 0 :(得分:0)
试试这个:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
headerView = navigationView.getHeaderView(0);
tvLogin = (Textview) headerView.findViewById(R.id.login_textview_id);
使用headerView,您必须转换TextView。然后在textview上应用click listner。
答案 1 :(得分:0)
NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);
View header=navigationView. findViewById(R.id.header);
view=navigationView.inflateHeaderView(R.layout.nav_header_main);*/
login = (TextView)header.findViewById(R.id.login);
register = (TextView)header.findViewById(R.id.register);
login.setOnClickListener(this);
register.setOnClickListener(this);
您应该对标题视图进行充气,并使用该视图来强制转换TextView。希望这可以解决你的问题。
您没有投射TextView或通过id调用。所以Suystem找不到名字登录的东西