一:Activity概述
衆所周知,在Android程序開發中,一個Activity類就對應一個用戶界面,每一個用戶界面都有自己的一個佈局文件。而一個安卓程序正是由很多的Activity頁面組成。現在我們就來談一談怎麼創建一個Activity頁面和這些頁面之間怎麼傳輸數據。
二:Activity創建
1. 創建新的類繼承自Activity類
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import android.widget.EditText;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class NewActivity extends AppCompatActivity {
private EditText etName;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
}
}
2.爲該Activity類綁定佈局文件(xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="這是新的activity界面"
android:textColor="#000021"/>
</LinearLayout>
3.在AndroidManifest.xml文件中註冊該Activity
<activity android:name=".NewActivity">
<!-- 配置當前activity作爲程序的主界面 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
三:Activity之間的跳轉
在Android中,Activity與Activity之間的跳轉是藉助Intent對象來實現的。
1.Activity的數據單向傳遞
1.Activity之間傳遞簡單數據類型
發送端:
//進行Activity的跳轉
//創建intent對象
Intent intent=new Intent();
//爲intent對象設置目的地
intent.setClass(MainActivity.this,NewActivity.class);
//跳轉到新的Activity
//跳轉時需要攜帶的數據
intent.putExtra("name",names[position]);
intent.putExtra("phone","123456");
intent.putExtra("email","[email protected]");
接收端:
//接收傳遞過來的數據
Intent request=getIntent();
String name=request.getStringExtra("name");
String phone=request.getStringExtra("phone");
String email=request.getStringExtra("email");
2.將數據封裝到bundle中再進行傳遞
發送端:
//將數據封裝到Bundle中再傳送到intent
Bundle bundle=new Bundle();
bundle.putString("name",names[position]);
bundle.putString("phone","123456");
bundle.putString("email","123@sss");
intent.putExtra("bundle",bundle);
接收端:
Bundle bundle=request.getBundleExtra("bundle");
String name=bundle.getString("name");
String phone=bundle.getString("phone");
String email=bundle.getString("email");
3.傳輸複雜的數據類型
javaBean要實現Serializable接口
/**
* 自定義傳輸數據類型,需要實現Serializable接口
*/
public class Student implements Serializable {
private String name;
private String phone;
private String email;
public Student() {
}
public Student(String name, String phone, String email) {
this.name = name;
this.phone = phone;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
發送端:
//傳輸自定義數據類型
Student student=new Student("張三","123","123");
intent.putExtra("stu",student);
startActivity(intent);//不傳遞數據,並且不需要做出響應
接收端:
//接收相應的數據
Student student= (Student) request.getSerializableExtra("stu");
String name=student.getName();
String phone=student.getPhone();
String email=student.getEmail();
2.Activity的數據雙向傳遞
發送端需要設置請求碼:
startActivityForResult(intent,100);
接收端返回數據:
public void onClicked(View v){
//向mainActivity返回數據
Intent response =new Intent();
response.putExtra("name",etName.getText().toString());
//響應
setResult(200,response);
//結束當前的NewActivity
finish();
}
發送方接收返回數據:
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//requestCode跳轉時的請求碼
//resultCode返回響應的結果碼
//data返回響應的Intent對象
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==100&&resultCode==200){
//獲得從NewActivity響應的數據
String name=data.getStringExtra("name");
//修改數據源
names[currentPosition]=name;
//刷新ListView
adapter.notifyDataSetChanged();
}
}