2

ボタンを使用してある画面から別の画面に移動しようとすると、メインからセカンダリに移動できますが、2 番目の画面から戻ろうとすると、「残念ながら、アプリが停止しました」というエラー メッセージが表示されます。

注: 3 番目のレイアウト/アクティビティがあるため、ソリューションをこの 3 番目のオプションにコピーします。

私はAndroidで初めてで、私がしていることへのより良いアプローチを提供できるかどうか疑問に思っています(アクティビティはマニフェストで宣言されています。実際には、2番目の画面をメインとして使用すると、1番目の画面にうまく行きます(2番目のオプションとして) 2番目の画面に戻ると、再びエラーが発生しました)、事前にthx!!:

package com.example.citas.medicas;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Citas_Medicas extends Activity {
private Button btnIraRegistrarPaciente;
private Button btnIraRegistrarDoctor;
private Button btnIraRegistrarCita;
private Button btnIraReportePacientes;
private Button btnIraReporteHistorialCitas;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_citas__medicas);

    btnIraRegistrarPaciente = (Button)findViewById(R.id.btnIraRegistrarPaciente);
    btnIraRegistrarDoctor = (Button)findViewById(R.id.btnIraRegistrarDoctor);
    btnIraRegistrarCita = (Button)findViewById(R.id.btnIraRegistrarCita);
    btnIraReportePacientes = (Button)findViewById(R.id.btnIraReportePacientes);
    btnIraReporteHistorialCitas = (Button)findViewById(R.id.btnIraReporteHistorialCitas);

}

public void onStart()
{
    super.onStart();

    btnIraRegistrarPaciente.setOnClickListener(new OnClickListener()
            {
                public void onClick(View component)
                {
                    setContentView(R.layout.registrarpaciente);
                }
            }               
    );

}

}

これがセカンダリJavaです(onStartが問題ないかどうかはわかりません):

package com.example.citas.medicas;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Registrar_Paciente extends Activity implements OnClickListener {
private Button btnRegistrarPaciente;
private Button btnVolverMenuPrincipal1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.registrarpaciente);

    btnRegistrarPaciente = (Button)findViewById(R.id.btnRegistrarPaciente);
    btnVolverMenuPrincipal1 = (Button)findViewById(R.id.btnVolverMenuPrincipal1);

    btnRegistrarPaciente.setOnClickListener(this);
    btnVolverMenuPrincipal1.setOnClickListener(this);

}



  public void onStart()
  {
    super.onStart();

    btnRegistrarPaciente.setOnClickListener( 
            new OnClickListener()
            {
                public void onClick(View component)
                {
                    setContentView(R.layout.registrarpaciente);
                }
            }               
    );

    btnVolverMenuPrincipal1.setOnClickListener( 
            new OnClickListener()
            {
                public void onClick(View component)
                {
                setContentView(R.layout.activity_citas__medicas);

                    //Intent intent = new Intent(Registrar_Paciente.this, Citas_Medicas.class);
                    //startActivity(intent);
                }
            }
    );

  }
}
4

2 に答える 2

2

onClickHandlers を の中に入れるのではなく、それ自体onStart()の中に入れた方が良いと思いますonCreate()。つまり、それが従来のやり方です。

さまざまなアクティビティを使用しているため、単に変更するだけではsetContentView()不十分です。私も間違っているかもしれませんが、アクティビティを切り替える標準的な方法はインテントを使用することです。

このようなもの :

btnIraRegistrarPaciente.setOnClickListener(new OnClickListener()
            {
                public void onClick(View component)
                {
                    Intent intent = new Intent(context, Registrar_Paciente.class);
                    startActivity(intent);

                }
            }               
    );
于 2012-09-21T09:15:12.230 に答える
1

アクティビティのレイアウトを変更する代わりに、アクティビティを変更する必要がある場合があります。関数SetContentView b/c に注意してください。これにより、以前に設定したレイアウトでコントロールに割り当てられたメモリが解放されます。

最初のアクティビティ:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_citas__medicas);

    btnIraRegistrarPaciente = (Button)findViewById(R.id.btnIraRegistrarPaciente);

    btnIraRegistrarPaciente.setOnClickListener(new OnClickListener()
            {
                public void onClick(View component)
                {
                    //setContentView(R.layout.registrarpaciente);
                    Intent intent = new Intent(Citas_Medicas.this, Registrar_Paciente.class);
                    startActivity(intent);
                }
            }               
    ); 

}

2 番目のアクティビティ:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.registrarpaciente);

    btnRegistrarPaciente = (Button)findViewById(R.id.btnRegistrarPaciente);

    btnRegistrarPaciente.setOnClickListener(new OnClickListener()
            {
                public void onClick(View component)
                {
                    //setContentView(R.layout.registrarpaciente);
                    Intent intent = new Intent(Registrar_Paciente.this, Citas_Medicas.class);
                    startActivity(intent);
                }
            }               
    );

}
于 2012-09-21T09:37:43.277 に答える