Android 入门第三讲02-Activity之间的跳转与传值(Activity的创建+跳转+关闭,Activity的任务栈,Activity跳转传递数据(普通数据+对象类型)+数据回传,)

Android 入门第三讲02-Activity之间的跳转与传值((Activity的创建,Activity的跳转,Activity的关闭,Activity的任务栈,Activity跳转传递数据(普通数据+对象类型))


Android 入门第三讲01-Activity的简单逻辑操作(对文本,图片进行设置(两种获取控件的方法),按钮点击-点击按钮打印日志,获取文本框的值+计算器简易案例)

1.Activity的创建

1.找到需要创建的activity
在这里插入图片描述
2.点击finish
在这里插入图片描述
3.注意问题
在这里插入图片描述
4.解决方法
在这里插入图片描述

创建以后会生成
1.一个java文件
在这里插入图片描述
2.一个xml布局文件
在这里插入图片描述
3.manifests里多了一句代码 (所有的activity都一定要在manifests里进行注册)
在这里插入图片描述
这里讲解一下,为什么运行显示的是mainactivity的内容而不是main2activity
是因为在mainactivity下有这样两行代码
在这里插入图片描述

2.Activity的跳转

activity代码
在这里插入图片描述
核心代码

 Button button =findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);

            }
        });


运行

3.Activity的关闭(finish方法)

刚才我们实现跳转了一个界面,现在我们怎么返回上一个界面呢

方法一,如果也是用Intent ,我们运行的确可以实现返回,在这里插入图片描述
但是这个方法有一个很大的问题,这里就需要讲到activity任务栈机制,在下面我会讲到,好奇的小伙伴可以提前看
方法二,用finish方法,把启动的第二个activity关闭,运行效果是一样的,但是此时任务栈里只有一个activity1了
在这里插入图片描述

4.Activity的任务栈(安卓的任务栈就是相当于把activity都放在一个栈里面)

如果是用Intent 跳转,返回也是Intent ,就会在安卓的任务栈里面产生两个activity1,在启动第一个activity1的时候,会把第一个activity1压入栈底,点击跳转,启动activity2,会把activity2压到第一个activity1的上面,点击返回,会启动第二个activity1,但实际上我们只需要启动一个activity1
在这里插入图片描述

5.Activity跳转传递数据

传递普通数据

1.activity1传递数据
在这里插入图片描述
2.activity2通过name接收数据
在这里插入图片描述
activity1代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText editText=findViewById(R.id.editText);
        Button button =findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("key",editText.getText().toString());
                startActivity(intent);

            }
        });


    }


}

activity2代码

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        String s = getIntent().getStringExtra("key");
        TextView textView=findViewById(R.id.textView2);
        Button button=findViewById(R.id.button2);

        textView.setText(s);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               finish();
            }
        });
    }
}

activity1xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dp"
        android:text="跳转"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="22dp"
        android:layout_marginLeft="22dp"
        android:layout_marginTop="43dp"
        android:text="第一个页面"
        app:layout_constraintStart_toStartOf="@+id/button"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="75dp"
        android:layout_marginLeft="75dp"
        android:layout_marginTop="86dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

activity2xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="277dp"
        android:text="第二个页面"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="53dp"
        android:text="返回"
        app:layout_constraintBottom_toTopOf="@+id/textView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

运行结果

在这里插入图片描述

传递对象类型

1.创建实体类先序列化实现Serializable接口
在这里插入图片描述
2.activity1 传递数据,给实体类赋值
在这里插入图片描述
3.activity2接收数据,注意接收的方法和文本框取值
在这里插入图片描述
activity1代码


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button button=findViewById(R.id.button);
      button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              Student student=new Student();
              student.age=20;
              student.name="高冷小王子";
              Intent intent=new Intent(MainActivity.this,Main2Activity.class);
              intent.putExtra("key",student);
              startActivity(intent);
          }
      });



activity2代码


public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

      Student student= (Student) getIntent().getSerializableExtra("key");//强转

        TextView textView=findViewById(R.id.textView);
        TextView textView1=findViewById(R.id.textView2);

        textView.setText(String.format(String.valueOf(student.age)));//注意需要格式化
        textView1.setText(String.format(student.name));


        Log.i("main",student.name+ "age:"+student.age);
    }
}

activity1的xml代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="164dp"
        android:text="跳转"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

activity2的xml代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="120dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="21dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="@+id/textView"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

运行结果
在这里插入图片描述

6.Activity之间的数据回传

需求分析:第二个activity回传数据到第一个activity
activity1 注意和上面的代码区别
在这里插入图片描述
activity2
在这里插入图片描述
activity1代码

public class MainActivity extends AppCompatActivity {
    TextView textView;//全局变量
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      textView=findViewById(R.id.textView1);
      Button button=findViewById(R.id.button);
      textView.setText("137888888888");//先给定一个数据
      button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              Intent intent=new Intent(MainActivity.this,Main2Activity.class);
              intent.putExtra("key",textView.getText().toString());
            //  startActivity(intent);
              startActivityForResult(intent,0);//发送码为0
          }
      });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String s = data.getStringExtra("key2");
        textView.setText(s);


    }
}

activity2代码


public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

      String s= getIntent().getStringExtra("key");

        final EditText editText=findViewById(R.id.editText);
        Button button=findViewById(R.id.button2);
        editText.setText(s);//接收数据

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=getIntent();
                intent.putExtra("key2",editText.getText().toString());//注意name不要重名了
                setResult(1,intent);//结果码为1
                finish();
            }
        });

运行结果
在这里插入图片描述

本节就讲到这里啦,但是关于activity的故事还没有结束哦,谢谢您的阅读,下一讲我们继续
Android 入门第三讲03-Activity的生命周期(理论)(Activity生命周期中的方法,Activity生命周期(一个和两个activity的生命周期分析))

猜你喜欢

转载自blog.csdn.net/qq_46526828/article/details/107288817