![](/img/trans.png)
[英]how to fix null pointer exception for imagebutton 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.