2017-02-24 100 views
0

你好,我有一個奇怪的問題 我是新的Android應用程序開發 我連接我的設備(三星A5)Android Studio使用它,而不是使用模擬器。 當我跑的應用當我的設備調試Android應用程序崩潰

package com.example.bob.myfirstapp; 

import android.app.Activity; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b = (Button)findViewById(R.id.button); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setContentView(R.layout.contact); 

      } 
     }); 
    } 
} 

它運行完全 但是當我添加此:按鈕BC =(按鈕)findViewById(R.id.button);我在運行它時崩潰了mainActivity類中的 。

package com.example.bob.myfirstapp; 

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
/***********************************************/ 
Button bc = (Button)findViewById(R.id.button); 
/**********************************************/ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button b = (Button)findViewById(R.id.button); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setContentView(R.layout.contact); 
      } 
     }); 
    } 
} 

哪裏出了問題,我應該怎麼做才能解決它 非常感謝你提前

回答

2

首先你需要了解Java屬性如何initialized的請向我解釋。

接下來,您需要了解findViewById的工作原理。它查找從DecorView又名root view開始的視圖,該視圖通過調用setContentView進行初始化。現在

,你會發現,

Button bc = (Button)findViewById(R.id.button); 

setContentView調用之前實際上得到執行。這會給你帶來麻煩。

+0

非常感謝你的回答非常有價值,並讓我明白我的錯誤在哪裏:) –

+0

@ N.Belhadj很樂意幫忙 – j2ko