我在Android项目中尝试在屏幕之间导航时遇到了一些问题。我还没有创建其他的活动类,我只是试图通过SetContentView(R.layout.XXX)打开其他XML文件。这是我的主要活动:
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")时,它可以工作,我可以打开另外两个屏幕。按钮" btVoltar"正在被其他XML用于返回主屏幕(activity_navegacao)。
我已经检查了R类上的XML的ID,没关系。在执行项目之前,我也没有收到任何错误通知。对不起英语不好,如果你们能帮助我,我很感激。
答案 0 :(得分:2)
您正在获取NullPointerException
,因为您正在引用尚未显示的XML布局上的按钮。 (即activity_navegacao.xml
)上找不到该按钮。
因此,您不应多次调用setContentView
来更改视图,就像您在此代码中所做的那样。相反,您应该考虑将每个屏幕设置为不同的活动(并且每个活动仅调用setContentView
一次),或者查看Fragments和FragmentTransactions。片段将允许您替换视图,就像您尝试在此处一样。
答案 1 :(得分:0)
你可以初始化视图只有视图存在于屏幕中。在你的明确说明当前屏幕中没有按钮“btVoltar”(activity_navegacao)。所以在屏幕出现后初始化视图。所以改变你的代码如下
@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();
}
});
}
}