簡體   English   中英

Android中的Onclicklistener上的空指針異常

[英]Null pointer Exception at Onclicklistener in android

如何恢復出現空指針異常的問題,而不是在menu.setOnClickListener(new View.OnClickListener(){)處,如果我按另一個應打開的活動(關於頁面),則會顯示一個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"/>

您會收到NullPointerException,因為您沒有初始化imageview。請先執行。

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

在將onClick Listener設置為圖像視圖之前完成此行,然后完成。希望它會有所幫助。

在設置監聽器之前,您尚未正確初始化菜單變量

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

然后寫你的聽線...

正如我所懷疑的那樣,您已經將menu聲明為實例變量(在類的頂部),但是您從未將其實例化為局部變量。 添加行

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

在onCreate()方法的頂部,在設置OnClickListener之前,它將起作用。

聲明實例變量(已完成)與實際對其進行初始化之間是有區別的。 從這個意義上講,您可以像常規java類中的構造函數一樣查看onCreate()方法。 在類的頂部聲明變量是不夠的,您必須將其初始化為實際對象的變量。

這聽起來很瑣碎,但我相信並非如此。 當我第一次學習Java時,在我深入研究這個概念之前,我花了很多時間在屏幕上大喊關於您現在遇到的相同錯誤。

您應該傳遞正在運行的活動的上下文,而不是您想要運行的活動,問題是About.this,將其替換為當前Activity的上下文

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

您還沒有實例化菜單1st實例化。

您在相同的活動中調用相同的類,如下所示更改您的以下代碼

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

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

要么

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

我有一個類似的問題。 我發現在findViewById()中使用的xml ID來自與當時處於活動狀態的頁面不同的頁面布局。

沒有警告。 只需確保諸如“保存”之類的常用按鈕具有良好的命名約定即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM