【Android】一文帶你徹底消滅Activity的創建和跳轉

一: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();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章