0

如何在 menu.setOnClickListener(new View.OnClickListener() { 的位置恢复 Null 指针异常的问题,如果我按下另一个活动(关于页面)应该打开,我有一个 imageview(menu),但在这里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"/>

4

6 回答 6

3

你得到 NullPointerException 因为你没有初始化 imageview。请先做。

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

在您将 onClick 侦听器设置为您的图像视图之前写下这一行,您就完成了。希望它会有所帮助。

于 2013-02-04T06:19:24.153 回答
2

在设置监听器之前,您没有正确初始化菜单变量,您应该

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

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

于 2013-02-04T06:22:54.177 回答
2

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

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

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

声明实例变量(您已经完成)和实际初始化它是有区别的。从这个意义上说,您可以将 onCreate() 方法视为常规 Java 类中的构造函数。在类的顶部声明变量是不够的,您必须将其初始化为实际对象的变量。

这可能听起来微不足道,但相信我不是。当我第一次学习 java 时,在我完全理解这个概念之前,我花了好几个小时在屏幕上尖叫你现在遇到的同样类型的错误。

于 2013-02-04T06:47:51.207 回答
1

您应该传递正在运行的活动的上下文而不是您希望运行的活动,问题是 About.this ,将其替换为当前活动的上下文

startActivity(new Intent(About.this, About.class));
于 2013-02-04T06:17:50.253 回答
0

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

没有警告。只需要确保像保存这样的常用按钮具有良好的命名约定。

于 2014-03-09T06:45:40.613 回答
0

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

您在同一个活动中调用同一个类,将您的以下代码更改如下

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

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

或者

 startActivity(new Intent(CurrentClass.this, NewClass.class));
于 2013-02-04T06:21:06.510 回答