如何恢复空指针异常的问题,而不是在menu.setOnClickListener(new View.OnClickListener(){
,
如果我按另一个应打开的活动(关于页面),我会有一个imageview(菜单),但是在这里on imageview的OnClick上,我遇到了错误,并且应用程序强制关闭。
这是代码
public class About extends Activity {
LinearLayout line1, line2;
ImageView menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
menu = (ImageView)findViewById(R.id.menu);
menu.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
menu.setVisibility(View.VISIBLE);
// TODO Auto-generated method stub
line1.setVisibility(View.VISIBLE);
if (line2.getVisibility() == View.INVISIBLE || line2.getVisibility() == View.GONE) {
line2.setVisibility(View.VISIBLE); }
else {
line2.setVisibility(View.INVISIBLE);
}
}
});
ImageView about = (ImageView) findViewById(R.id.about);
about.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
startActivity(new Intent(About.this, About.class));
}
});
xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black" >
<LinearLayout
android:id="@+id/ll1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/black"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true">
<ImageView
android:id="@+id/menu"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/menu" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll2"
android:layout_width="199dp"
android:layout_height="wrap_content"
android:background="@color/black"
android:layout_toRightOf="@+id/ll1"
android:visibility="gone"
>
<ImageView
android:id="@+id/about"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_above="@+id/textView1"
android:layout_toLeftOf="@+id/jobs"
android:src="@drawable/about" />
</LinearLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@color/white"
android:textColor="@color/white"/>
最佳答案
正如我所怀疑的那样,您已经将menu声明为实例变量(在类的顶部),但是您从未将其实例化为局部变量。添加行
menu = (ImageView)findViewById(R.id.menu)
在onCreate()方法的顶部,在设置OnClickListener之前,它将起作用。
声明实例变量(已完成)与实际对其进行初始化之间是有区别的。从这个意义上讲,您可以像常规java类中的构造函数一样看待onCreate()方法。仅在类的顶部声明变量是不够的,您必须将其初始化为实际对象的变量。
这听起来似乎微不足道,但请相信我并非如此。当我第一次学习Java时,在我深入研究这个概念之前,我花了很多时间在屏幕上大喊着与您现在遇到的相同错误。