【Android开发】不同Activity之间的数据回传实例(一)摘桃子游戏

一、功能介绍

该项目实现的功能主要有:

  1. 在首页显示一个按钮点击该按钮跳转到桃园页面
  2. 在桃园页面,点击桃子会弹窗显示摘到几个桃子,同时被点击桃子消失,总桃子数+1
  3. 点击退出桃园会返回首页,首页桃子数会根据点击的桃子数动态增加

二、代码实现

1. 资源准备

将项目所需要的图片bg.png、monkey.png、btn_peach.png、peach_pic.png 导入程序的drawablehdpi文件夹中(默认情况下程序中没有drawable-hdpi 文件夹,需手动在res 文件夹中创建一个)。

2. 布局文件设计

2.1 主Activity

在layout文件夹中编辑activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center"
        android:text="首页"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:gravity="center_vertical">

        <ImageView
            android:id="@+id/iv_monkey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/monkey" />

        <Button
            android:id="@+id/btn_peach"
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="250dp"
            android:layout_toRightOf="@id/iv_monkey"
            android:background="@drawable/btn_peach"
            android:gravity="center"
            android:text="去桃园"
            android:textColor="@android:color/black"
            android:textSize="18sp" />
        <ImageView
            android:id="@+id/iv_peach"
            android:layout_width="45dp"
            android:layout_height="35dp"
            android:layout_below="@+id/btn_peach"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:src="@drawable/peach_pic" />
        <TextView
            android:id="@+id/tv_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_peach"
            android:layout_marginTop="25dp"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/iv_peach"
            android:text="摘到0 个"
            android:textColor="@android:color/black"
            android:textSize="20sp" />
    </RelativeLayout>
</LinearLayout>
2.2 辅Activity

在layout文件夹中新增activity_peach.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center"
        android:text="桃园"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/tree_bg">
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginTop="70dp"
            android:background="@drawable/tree">
            <Button
                android:id="@+id/btn_one"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_marginLeft="140dp"
                android:layout_marginTop="35dp"
                android:background="@drawable/peach_pic" />

            <Button
                android:id="@+id/btn_two"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_below="@id/btn_one"
                android:layout_marginLeft="80dp"
                android:layout_marginTop="5dp"
                android:background="@drawable/peach_pic" />
            <Button
                android:id="@+id/btn_three"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_below="@id/btn_one"
                android:layout_marginLeft="70dp"
                android:layout_marginTop="5dp"
                android:layout_toRightOf="@id/btn_two"
                android:background="@drawable/peach_pic" />
            <Button
                android:id="@+id/btn_four"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_below="@id/btn_two"
                android:layout_marginLeft="25dp"
                android:layout_marginTop="15dp"
                android:background="@drawable/peach_pic" />
            <Button
                android:id="@+id/btn_five"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_below="@id/btn_two"
                android:layout_marginLeft="70dp"
                android:layout_marginTop="15dp"
                android:layout_toRightOf="@id/btn_four"
                android:background="@drawable/peach_pic" />

            <Button
                android:id="@+id/btn_six"
                android:layout_width="55dp"
                android:layout_height="40dp"
                android:layout_below="@id/btn_two"
                android:layout_marginLeft="45dp"
                android:layout_marginTop="15dp"
                android:layout_toRightOf="@id/btn_five"
                android:background="@drawable/peach_pic" />
        </RelativeLayout>
        <Button
            android:id="@+id/btn_exit"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_margin="50dp"
            android:background="@drawable/btn_peach"
            android:text="退出桃园"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="18sp"/>
    </RelativeLayout>
</LinearLayout>
2.3 其他资源文件

主题文件themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.PickPeach" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
    <style name="MyCustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

3. 实现逻辑功能

3.0 全局配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hzj.pickpeach">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/MyCustomTheme">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".PeachActivity"
            android:exported="true">
        </activity>
    </application>

</manifest>
3.1 首页功能

在MainActivity 中实现“去桃园”按钮的点击事件,当点击按钮时程序跳转到桃园摘桃的界面。同时,还需要接收桃园界面回传过来的桃子个数。

public class MainActivity extends AppCompatActivity {
    private Button btn_peach;
    private TextView tv_count;
    private int totalCount = 0;

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

    private void init() {
        btn_peach = findViewById(R.id.btn_peach);
        tv_count = findViewById(R.id.tv_count);
        //为按钮设置点击事件监听器
        btn_peach.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //设置意图对象,实现界面跳转
                Intent intent = new Intent(MainActivity.this, PeachActivity.class);
                startActivityForResult(intent, 1);
//                startActivity(intent);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //判断请求码和返回码是否正确
        if (requestCode==1 && requestCode==1) {
            //获取回传的数据
            int count = data.getIntExtra("count", 0);;
            totalCount = totalCount + count;
            tv_count.setText("摘到" + totalCount + "个");
        }
    }
}
3.2 桃园界面的摘桃效果

点击桃子实现摘桃效果,同时全局桃子数动态变化,点击退出桃园,返回首页,同时更新首页桃子数。

public class PeachActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_one, btn_two, btn_three, btn_four, btn_five, btn_six, btn_exit;
    private int count = 0;//桃子个数

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

    private void init() {
        btn_one = findViewById(R.id.btn_one);
        btn_two = findViewById(R.id.btn_two);
        btn_three = findViewById(R.id.btn_three);
        btn_four = findViewById(R.id.btn_four);
        btn_five = findViewById(R.id.btn_five);
        btn_six = findViewById(R.id.btn_six);
        btn_exit = findViewById(R.id.btn_exit);
        btn_one.setOnClickListener(this);
        btn_two.setOnClickListener(this);
        btn_three.setOnClickListener(this);
        btn_four.setOnClickListener(this);
        btn_five.setOnClickListener(this);
        btn_six.setOnClickListener(this);
        btn_exit.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_one: //第一个桃子的点击事件
                info(btn_one);
                break;
            case R.id.btn_two: //第二个桃子的点击事件
                info(btn_two);
                break;
            case R.id.btn_three: //第三个桃子的点击事件
                info(btn_three);
                break;
            case R.id.btn_four: //第四个桃子的点击事件
                info(btn_four);
                break;
            case R.id.btn_five: //第五个桃子的点击事件
                info(btn_five);
                break;
            case R.id.btn_six: //第六个桃子的点击事件
                info(btn_six);
                break;
            case R.id.btn_exit: //“退出桃园”按钮的点击事件
                returnData();
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + view.getId());
        }
    }

    /**
     * 按钮的点击事件处理
     */
    private void info(Button btn) {
        //桃子个数加1
        count++;
        //被摘掉的桃子设置为隐藏不可见
        btn.setVisibility(View.INVISIBLE);
        Toast.makeText(PeachActivity.this, "摘到" + count + "个桃子",
                Toast.LENGTH_LONG).show();
    }

    /**
     * 将数据回传到上个界面
     */
    private void returnData() {
        //设置意图对象,将摘桃子的个数回传给首页界面
        Intent intent = new Intent();
        intent.putExtra("count", count);
        //返回码标识
        setResult(1, intent);
        //销毁本界面
        PeachActivity.this.finish();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //当点击设备返回键时,调用数据回传方法,返回首页界面
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            returnData();
        }
        return false;
    }
}

三、效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/312557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PPT插件-大珩助手-《提取选中的幻灯片》-选中新建

选中新建 提取选中的幻灯片到新的幻灯文稿中。PDF编辑器可以提取指定的页面到新的PDF文档中&#xff0c;PPT没有这个功能&#xff0c;因此开发。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持Wps Wo…

锂电池的电压和容量怎么计算?

锂电池组是由电池单体&#xff08;电芯&#xff09;通过串并联来组成 1、串联(S)增加电压&#xff0c;容量不变。 例如&#xff1a;1个磷酸铁锂电池的额定电压为3.2V&#xff0c;容量为4000mAH&#xff0c;将10个磷酸铁锂电芯串联&#xff0c;电池组电压&#xff1a;3.2v*10&a…

usb静电防护芯片选择

方案1 USBLC6-2SC6 优缺点 优点&#xff1a;进出使用不同的焊盘&#xff0c;如果没有焊接好信号必定不能通过。有效的避免了虚焊导致故障。 缺点&#xff1a;不能省略&#xff0c;调试时也不能省略。 原理图 参考价格 参考来源 USB切换方案&#xff0c;多电脑共用USB方案…

leecode1143 | 最长公共子序列

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不…

2024Flutter岗位面试题总结

StatelessWidget和StatefulWidget的区别是什么&#xff1f; StatelessWidget是一个不可变的类&#xff0c;充当UI布局中某些部分的蓝图&#xff0c;当某个组件在显示期间不需要改变&#xff0c;或者说没有状态&#xff08;State&#xff09;&#xff0c;你可以使用它。 Statef…

【深度学习目标检测】十三、基于深度学习的血细胞识别(python,目标检测,yolov8)

血细胞计数是医学上一种重要的检测手段&#xff0c;用于评估患者的健康状况&#xff0c;诊断疾病&#xff0c;以及监测治疗效果。而目标检测是一种计算机视觉技术&#xff0c;用于在图像中识别和定位特定的目标。在血细胞计数中&#xff0c;目标检测技术可以发挥重要作用。 首先…

git修改最新提交(commit)信息

一、修改最近一次commit信息 1、首先通过git log查看commit信息 2、使用命令git commit --amend进入命令命令模式&#xff0c;按i进入编辑模式&#xff0c;修改好commit信息后按Esc键退出编辑模式&#xff0c;然后输入:wq保存编辑信息&#xff08;注意使用英文输入法&#xf…

D盘能不能随便格式化?根据不同情况来分析

随着计算机技术的发展&#xff0c;D盘已成为许多用户存储重要数据和文件的一部分。然而&#xff0c;当我们想要对D盘进行格式化时&#xff0c;是否可以随意进行操作呢&#xff1f;本文将探讨这一问题&#xff0c;并给出关于“电脑D盘数据格式化后怎么恢复”的相关方法。 图片来…

HarmonyOS@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数…

yolov8n 瑞芯微RKNN和地平线Horizon芯片仿真测试部署,部署工程难度小、模型推理速度快

特别说明&#xff1a;参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 因为之前写了几篇yolov8模型部署的博文&#xff0c;存在两个问题&…

机器学习-协同过滤

1、协同过滤要解决的问题 协同过滤算法主要用于推荐系统&#xff0c;推荐系统是信息过载所采用的措施&#xff0c;面对海量的数据信息&#xff0c;从中快速推荐出符合用户特点的物品。一些人的“选择恐惧症”、没有明确需求的人。 解决如何从大量信息中找到自己感兴趣的信息。…

如何一键添加引号和英文逗号,然后可以放入SQL中使用 → WHERE USER_NAME IN (‘张三‘,‘李四‘,‘王五‘)

如何一键添加引号和英文逗号&#xff0c;然后可以放入SQL中使用 → WHERE USER_NAME IN&#xff08;张三,李四,王五&#xff09; 一、背景二、解决方法三、一键添加引号和英文逗号的教程 一、背景 在日常开发中&#xff0c;当处理VARCHAR或VARCHAR2类型的字段时&#xff0c;很…

最新消息:OpenAI GPT Store 正式上线,GPTs 应用商店来了!

原文链接 https://openaigptguide.com/gpt-store-and-chatgpt-team/ OpenAI推出的两款新产品和服务&#xff1a;GPT Store和ChatGPT Team&#xff0c;提供了许多全新的解决方案和功能&#xff0c;旨在帮助用户更轻松地使用和构建GPT工具&#xff0c;同时也增加了公司的收入来源…

SQL-DQL-基础查询

目录 DQL-介绍 DQL-语法 DQL-基本查询 &#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f4dc;其他专栏&#xff1…

【LeetCode每日一题】2645. 构造有效字符串的最少插入数(计算组数+动态规划+考虑相邻字母)

2024-1-11 文章目录 [2645. 构造有效字符串的最少插入数](https://leetcode.cn/problems/minimum-additions-to-make-valid-string/)方法一&#xff1a;计算组数方法二&#xff1a;动态规划方法三: 考虑相邻字母 2645. 构造有效字符串的最少插入数 方法一&#xff1a;计算组数 …

QWebEngineView类方法、属性、信号与槽汇总

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 使用示例📝 方法📝 属性📝 信号(Signals)📝 槽(Slots)⚓️ 相关链接 ⚓️📖 介绍 📖 QWebEngineView 是 Qt 提供的一个用于呈现 Web 内容的类,基于 Google 的 Chromium 浏览器引擎。它提供了对现…

修改idea或者pycharm或者android studio的快捷键,快速跳转到行尾

ctrl enter这个快捷键是idea默认配置的&#xff0c;就是将光标所在的行切一刀&#xff0c;并且换到下一行。但是在我的开发习惯里面不怎么使用ctrl enter这个快捷键&#xff0c; 反而开发java或者flutter软件需要快速跳转到行尾添加分号 ; &#xff0c;但是使用end键脱离了我…

[C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

【框架地址】 https://github.com/charlesw/tesseract 【算法介绍】 Tesseract OCR是一个开源的光学字符识别引擎&#xff0c;它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发&#xff0c;并在2005年被Google收购后成为了开源项…

openssl3.2 - 在VS2019下源码调试openssl.exe

文章目录 openssl3.2 - 在VS2019下源码调试openssl.exe概述笔记先看一个用.bat调用openssl干活的实例VS2019调试参数设置设置 - 命令参数设置 - 工作目录设置 - 环境变量将命令行中需要的文件拷贝到exe目录单步调试备注END openssl3.2 - 在VS2019下源码调试openssl.exe 概述 …

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识&#xff0c;可看我之前这篇文章&#xff1a;详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…