如何恢复空指针异常的问题,而不是在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时,在我深入研究这个概念之前,我花了很多时间在屏幕上大喊着与您现在遇到的相同错误。

10-07 19:20
查看更多