一个Activity在电子设备中就相当于一屏内容,所以在一个app开发中,我们会建立好多个Activity,今天就来简单介绍一下Activity之间的调用。
首先在我们创建一个Android项目的时候,它会自动给我们创建一个MainActivity,这个Activity是默认的入口Activity,就是我们程序运行的第一个页面。然后我们还可以自己创建新的Activity
在上图红色框内的文件夹里面新建一个Activity,我们这里面直接选择创建Activity,软件自动会为我们配置相关的信息,入股我们没有直接选择创建Activity,而是选择创建class,那么我们还需要手动进行配置相关信息
配置过程如下图
只需要在对应文件中加上一句话即可,我已经用红色框框住了
接下来就是怎么启动我们新创建的Activity了
首先我们在入口Activity中创建一个按钮,以这个按钮来启动我们新创建的Activity
入口Activity中的部分代码
<Button
android:id="@+id/button1"
android:layout_marginTop="50dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我查看更多信息"/>
然后我们在入口Activity中的主方法中给这个按钮添加事件监听器
public class MainActivity extends AppCompatActivity {
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt=(Button)findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(MainActivity.this,DetailActivity.class);
startActivity(intent);
}
});
}
}
主要的代码就是
Intent intent=new Intent(MainActivity.this,DetailActivity.class);
startActivity(intent);
这个Intent就是我们用一个Activity调用另一个Activity所要创建的一个对象,它负责Android中各个组件之间的通讯,关于它我了解也不是很多,所以就不多说了。我只说一下它的入口参数,根据我现在的理解,它第一个入口参数就是创建它的那个Activity,在上面程序中,创建它的Activity是我们的入口Activity,也就是MainActivity,所以他的第一个参数就写成MainActivity.this
;然后它的第二个参数就是它要调用的那个Activity,我刚才创建Activity命名为DetailActivity,所以第二个参数就写成DetailActivity.class
,然后再开启DetailActivity,startActivity(intent);
,参数就是我们刚才创建的对象intent
写到这我们就已经实现了一个Activity调用另一个Activity了。然后我们还可以再DetailActivity的布局文件中再添加一个按钮,用来实现关闭DetailActivity,当我们关闭DetailActivity之后,程序就会退回到调用DetailActivity的Activity当中。
当然我们创建了DetailActivity之后,我们还得去写DetailActivity的布局文件,即activity_detail.xml文件
代码如下
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="哈哈哈哈,我啥都没有!"
android:textSize="30dp"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:textColor="#FF0077FF"/>
<Button
android:id="@+id/closeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你还是把我关了吧,不然你看见我难受"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:textSize="20sp"/>
这个布局文件包含的内容就是我们要显示的文本内容以及一个关闭按钮
运行效果如下图
当我们点击 点我查看更多信息按钮之后,就会出现下面内容
当我们在点击 你还是把我关了吧,不然你看见我难受 按钮之后,就会重新返回到上一个页面
下面再记录一下调用另一个Activity并返回结果的主要代码
入口Activity部分代码 MainActivity
public class MainActivity extends AppCompatActivity {
Button bt;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==0x11 && resultCode==0x11){
Bundle bundle=data.getExtras();
String adminId=bundle.getString("admin");
EditText admin1=(EditText)findViewById(R.id.admin);
admin1.setText(adminId);
String PassWordId=bundle.getString("passWord");
EditText PassWord=(EditText)findViewById(R.id.passWord);
PassWord.setText(PassWordId);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button registerButton=(Button)findViewById(R.id.Register);
Button loginButton=(Button)findViewById(R.id.Login);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,DetailActivity.class);
startActivityForResult(intent,0x11);
}
});
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String admin=((EditText)findViewById(R.id.admin)).getText().toString();
String passWord=((EditText)findViewById(R.id.passWord)).getText().toString();
if(!"".equals(admin) && !"".equals(passWord)){
Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this,"请输入完整的信息",Toast.LENGTH_LONG).show();
}
}
});
}
}
调用的Activity DetailActivity
public class DetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Button button=(Button)findViewById(R.id.Register);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String admin=((EditText)findViewById(R.id.admin)).getText().toString();
String passWord1=((EditText)findViewById(R.id.passWord1)).getText().toString();
String passWord2=((EditText)findViewById(R.id.passWord2)).getText().toString();
if(!"".equals(admin) && !"".equals(passWord1) && !"".equals(passWord2)){
if(passWord1.equals(passWord2)){
Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putCharSequence("admin",admin);
bundle.putCharSequence("passWord",passWord1);
intent.putExtras(bundle);
setResult(0x11,intent);
finish();
}else{
Toast.makeText(DetailActivity.this,"两次输入的密码不一样",Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(DetailActivity.this,"请输入完整的注册信息",Toast.LENGTH_LONG).show();
}
}
});
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
}
}
注意如果我们需要调用的Activity返回后需要在调用他的Activity装哪个显示刚才记录的信息的话,我们需要在调用他的Activity中写startActivityForResult(intent,0x11);
其中的0x11是请求码,可以随便写
然后在被调用的Activity中创建Intent是用getIntent()来实现的,然后还需要再写一个返回码setResult(0x11,intent);
这个0x11也可以随便写,不过一般我们把它和请求码写成一样。然后我们需要在调用其他Activity的Activity中,在本例中也就是MainActivity,我们需要重写方法
protected void onActivityResult(int requestCode, int resultCode, Intent data)
然后进行判断两个码
if(requestCode==0x11 && resultCode==0x11)
然后就可以对被调用的Activity返回来的结果进行处理了,需要先创建一个变量去接收返回来的结果,然后再把存储返回结果的变量给添加到相应的布局文件中。