【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();
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/106323129