Android四大组件——Activity——Activity数据回传

2022/4/12 23:20:39

本文主要是介绍Android四大组件——Activity——Activity数据回传,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity。返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据,那怎么实现传递数据给上一个Activtiy呢?

数据回传举例:插入图片:从相册或者相机获取图片显示到备忘录。

其实Android是使用任务来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况下,每当启动一个新的Activity,就会在返回栈中入栈,并处于栈顶的位置。每当按下返回键(back)或者调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前一个入栈的Activity就会重新处于栈顶的位置。

总结:每启动一个新的Activity就会覆盖在原Activity之上,点击Back键会销毁最上面的Activity,下面的一个Activity就会显示出来。

 Activity类中还有一个用于启动Activity的startActivityForResult()方法,它期望在Activity销毁的时候能够返回一个结果给上一个Activity。

 

1.创建MainActivity和SingInActivity

 

 我们在SingInActivity中输入账号和密码,按下返回按钮后使其在MainActivity中显示出来。

2.代码实现

activity_main.xml:就是一个跳转到SingInAvtivity的按钮和用于显示返回信息的TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/recharge"
        android:layout_margin="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册!" />
    <TextView
        android:id="@+id/result_text"
        android:textSize="23dp"
        android:layout_margin="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

activity_singin.xml:只是放了两个用于输入信息的EditText

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".SingInActivity">

    <EditText
        android:id="@+id/user"
        android:layout_margin="30dp"
        android:hint="账号"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <EditText
        android:id="@+id/password"
        android:inputType="textPassword"
        android:layout_margin="30dp"
        android:hint="密码"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


</LinearLayout>

 MainActivity:

package com.java.androidstudy;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Button recharge;
    private TextView result_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        recharge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SingInActivity.class);
                startActivityForResult(intent,1); //请求码是用来在onActivityResult()中判断数据的来源。也可以是别的数
                //使用该方法启动的SingInActivity,在SingInActivity销毁后会调用onActivityResult()方法。我们重写该方法在这里接收返回过来的数据,并显示出来。
            }
        });
    }

    private void initView(){
        recharge = findViewById(R.id.recharge);
        result_text = findViewById(R.id.result_text);
    }

    @Override                      //请求码,处理结果,返回的数据
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode ==1){  //如果请求码为1
            if(resultCode ==RESULT_OK){  //下一个Activity返回的结果为RESULT_OK,则接收数据并显示出来
                String user = data.getStringExtra("user");
                String password = data.getStringExtra("password");
                result_text.setText("账号:"+user+"  密码:"+password);
            }
        }
    }
}

SingInActivity:

package com.java.androidstudy;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;

public class SingInActivity extends AppCompatActivity {
    private EditText user;
    private EditText password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_singin);
        initView();
        //将左上角的返回图标显示出来
        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

    private void initView(){
        user = findViewById(R.id.user);
        password = findViewById(R.id.password);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case android.R.id.home:  //左上角返回图标点击事件
                Intent intent = new Intent(); //还是用Intent传递数据,这里用的是Intent的空参构造器,不需要指定跳转的界面,因为按下返回按钮会返回到上一个Activity.
                intent.putExtra("user",user.getText().toString());
                intent.putExtra("password",password.getText().toString());
                setResult(RESULT_OK,intent);//使用该方法向上一个Activity返回数据。第一个参数是处理结果,第二个参数是将带有数据的intent传递回去。
                finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

运行效果:

 

 

 

 

 

 这样就完成了数据的回传。



这篇关于Android四大组件——Activity——Activity数据回传的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程