-1

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」がメインのレイアウトです。このコードを実行しようとすると、アプリケーションが終了し、SetContentView に問題があることを示す NullPointerException エラーが発生します。

最後の setOnClickListener (ボタン「btVoltar」) のコードを切り取ると、それが機能し、他の 2 つの画面を開くことができます。ボタン「btVoltar」は、他の XML でメイン画面 (activity_navegacao) に戻るために使用されています。

R クラスの XML の id を既に確認しましたが、問題ありません。また、プロジェクトを実行するまでエラー通知を受け取りません。英語が下手で申し訳ありませんが、助けていただければ幸いです。

4

2 に答える 2

2

NullPointerException表示されていない XML レイアウト上のボタンを参照しているため、 を取得しています。(つまり、ボタンは にありませんactivity_navegacao.xml)。

このため、setContentViewこのコードで行っているように、ビューを変更するために複数回呼び出すべきではありません。代わりに、各画面を異なるアクティビティにする (アクティビティsetContentViewごとに 1 回だけ呼び出す) か、フラグメントと FragmentTransactions を調べることを検討する必要があります。ここでやろうとしているように、フラグメントを使用すると、ビューを置き換えることができます。

于 2014-11-21T03:56:35.913 に答える