使用按钮在布局/活动之间切换

时间:2012-09-21 09:09:56

标签: android android-layout android-button

我试图使用按钮从一个屏幕移动到另一个屏幕,我可以从主屏幕移动到辅助屏幕,但是当我试图从第二个屏幕返回时,我收到错误消息“不幸的是,应用程序已停止”。

注意:我将有第3个布局/活动,因此我将解决方案复制到第3个选项。

我是Android的新手并且想知道你是否可以提供更好的方法来做什么(活动在清单中声明,实际上当使用第二个屏幕作为主要时,它会精细到第一个屏幕(作为第二个选项)但是当试图回到第二个屏幕,它再次给了我错误),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);
                }
            }
    );

  }
}

2 个答案:

答案 0 :(得分:2)

不要将onClickHandlers放在onStart()中,我相信如果你将它们放在 onCreate() 本身内会更好。我的意思是,这是传统的做法。

由于您使用的是不同的活动,仅更改 setContentView() 是不够的。我也可能错了,但在活动之间切换的标准方法是通过Intents.

这样的事情:

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

                }
            }               
    );

答案 1 :(得分: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);
                }
            }               
    ); 

}

在第二项活动中:

@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);
                }
            }               
    );

}