-1

我在嘗試在我的Android項目的屏幕之間導航時遇到了一些問題。我還沒有創建其他Activities類,我只是想通過SetContentView(R.layout.XXX)打開其他XML文件。這是我的主要活動:無法啓動Android應用程序 - 點擊監聽器上的NullPointerException

package com.android.eduardo.navegacao; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 


public class NavegacaoActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    chamaTelaPrincipal(); 

    Button btCadastro = (Button) findViewById(R.id.btCadastro); 
    btCadastro.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaCadastro(); 
     } 
    }); 

    Button btConsulta = (Button) findViewById(R.id.btConsulta); 
    btConsulta.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaConsulta(); 
     } 
    }); 

    Button btVoltar1 = (Button) findViewById(R.id.btVoltar); 
    btVoltar1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaTelaPrincipal(); 
     } 
    }); 
} 
public void chamaCadastro(){ 
    setContentView(R.layout.activity_cadastro); 
} 

public void chamaConsulta(){ 
    setContentView(R.layout.activity_consulta); 
} 

public void chamaTelaPrincipal(){ 
    setContentView(R.layout.activity_navegacao); 
} 

} 

正如你所看到的,「R.layout.activity_navegacao」是我的主要版面。當我嘗試執行此代碼時,應用程序關閉,我收到一個NullPointerException錯誤,指出SetContentView上存在一些問題。

當我切斷最後一個setOnClickListener(按鈕「btVoltar」)的代碼時,它可以工作,我可以打開另外兩個屏幕。其他XML正在使用按鈕「btVoltar」返回到主屏幕(activity_navegacao)。

我已經在R類上檢查過XML的id了,沒關係。我也沒有收到任何錯誤通知,直到我執行該項目。對不起英文不好,如果你們能幫助我,我很感激。

+0

改爲改變setContentView xml以不同的xml開始新的活動。 – 2014-11-21 04:11:49

回答

2

你所得到的NullPointerException因爲你引用一個按鈕,是對尚未顯示XML佈局你的代碼視圖。 (即在activity_navegacao.xml上找不到該按鈕)。

由於這個原因,您不應該多次調用setContentView來更改視圖,就像您在此代碼中所做的那樣。相反,您應該考慮將每個屏幕設置爲不同的活動(並且每個活動只調用一次setContentView),或者查看片段和片段交易。片段將允許您替換視圖,就像您在此嘗試的那樣。

+0

哦,我現在明白了,btVoltar不在主屏幕中。感謝您的幫助,我現在開始學習Android;] – 2014-11-21 05:29:03

0

您可以只初始化視圖視圖存在於屏幕中。您明確表示按鈕「btVoltar」不存在於當前屏幕(activity_navegacao)中。因此,初始化後的屏幕來present.So更改像下面

  @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    chamaTelaPrincipal(); 

    Button btCadastro = (Button) findViewById(R.id.btCadastro); 
    btCadastro.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaCadastro(); 
     } 
    }); 

    Button btConsulta = (Button) findViewById(R.id.btConsulta); 
    btConsulta.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaConsulta(); 
     } 
    }); 

    } 
    public void chamaCadastro(){ 
    setContentView(R.layout.activity_cadastro); 
    } 

    public void chamaConsulta(){ 
    setContentView(R.layout.activity_consulta); 
    } 

public void chamaTelaPrincipal(){ 
    setContentView(R.layout.activity_navegacao); 
    Button btVoltar1 = (Button) findViewById(R.id.btVoltar); 
    btVoltar1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      chamaTelaPrincipal(); 
     } 
    }); 
} 

} 
+0

感謝您的幫助,我瞭解了btVoltar,它不在主屏幕上。我試過你說的這種方式,但它仍然不起作用。我將爲其他XML創建不同的活動類。 – 2014-11-21 05:31:08