在Android中的Onclicklistener处的空指针异常

时间:2013-02-04 06:13:20

标签: java android android-layout imageview

如何在menu.setOnClickListener(new View.OnClickListener(){的位置恢复Null指针异常的问题 , 我有一个imageview(菜单),如果我按下另一个活动(关于页面)应该打开,但在这里onview的imageview,我得到上面的错误和应用程序强制关闭。 这是代码

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"/>

6 个答案:

答案 0 :(得分:3)

你得到NullPointerException,因为你没有初始化imageview.please首先做它。

 ImageView menu=(ImageView)findViewById(R.id.menu);

在将onClick Listener设置为图像视图之前写下这一行,你就完成了。它会有所帮助。

答案 1 :(得分:2)

在设置应该

的侦听器之前,您没有正确初始化菜单变量
menu = (ImageView)findViewById(id.menu);

然后写下你的听力线......

答案 2 :(得分:2)

正如我所怀疑的,您已将菜单声明为实例变量(位于类的顶部),但您从未将其实例化为局部变量。添加行

menu = (ImageView)findViewById(R.id.menu) 

在onCreate()方法的顶部,在设置OnClickListener之前,它将起作用。

声明实例变量(您已经完成)和实际初始化之间存在差异。从这个意义上讲,您可以像常规java类中的构造函数一样查看onCreate()方法。将变量声明在类的顶部是不够的,您必须将其初始化为实际对象的变量。

这可能听起来微不足道,但相信我并非如此。当我第一次学习java时,在我开始围绕这个概念之前,我花了很多时间在屏幕上尖叫着你现在遇到的同样的错误。

答案 3 :(得分:1)

你应该传递活动的上下文,而不是你想要运行的活动,问题是关于这个,用当前活动的上下文替换它

startActivity(new Intent(About.this, About.class));

答案 4 :(得分:0)

您没有实例化菜单第一次实例化。

您正在使用相同的活动调用同一个类,请更改以下代码,如下所示

  startActivity(new Intent(About.this, About.class));

 startActivity(new Intent(getApplicationContext(), NewClass.class));

 startActivity(new Intent(CurrentClass.this, NewClass.class));

答案 5 :(得分:0)

我有类似的问题。我发现我在findViewById()中使用的xml id来自与当时活动的页面布局不同的页面布局。

没有警告。只需要确保像Save这样的常用按钮有一个很好的命名约定。