我们知道,Intents 在 Android 中用于在 Activity 之间传递数据。但是,还有另一种更好的方式,可以用更少的代码量在 Activity 之间传递数据,那就是使用 Android 中的 Bundle。Android Bundle 主要用于将数据从一个 Activity 传递到另一个 Activity。这里基本上使用了键值对的概念,想要传递的数据作为 Map 的值,稍后可以通过键来检索。Bundle 与 Intent 结合使用,值的发送和检索方式与 Intent 的情况相同。这取决于用户想要传递什么类型的值,但 Bundle 可以容纳所有类型的值,并可以传递给新的 Activity。
以下是传入/传出 Bundle 的主要类型:
> putInt(String key, int value), getInt(String key, int value)
>
> putString(String key, String value), getString(String key, String value)
>
> putStringArray(String key, String[] value), getStringArray(String key, String[] value)
>
> putChar(String key, char value), getChar(String key, char value)
>
> putBoolean(String key, boolean value), getBoolean(String key, boolean value)
在 Android 应用中使用 Bundle
在 Android 中,Bundle 总是与 Intent 一起使用。现在,为了使用 Bundle,让我们在 MainActivity 中编写以下代码。
Java
CODEBLOCK_b0550875
Kotlin
CODEBLOCK_f17d042e
现在创建另一个名为 SecondActivity 的空 Activity。现在要检索存储在 Bundle 中的数据,请在 SecondActivity 中编写以下代码。
Java
CODEBLOCK_9cf2a995
Kotlin
CODEBLOCK_7cb1a9c9
或者,如果不想使用默认值,也可以这样做,但请记住它可能会引发异常。
> 例如:boolean b = bundle.getBoolean("pass the key here");
如果不存在与该键对应的映射,则可能导致 NullPointerException。因此,建议为 Bundle 添加默认值。
步骤 1:创建一个新项目
- 点击 File,然后点击 New => New Project。
- 选择 Empty activity
- 选择语言为 Java/Kotlin
- 根据需要选择最低 SDK。
步骤 2:使用 activity_main.xml 文件
现在让我们在应用中添加两个 Button,一个按钮将传递存储在 Bundle 中的数据,另一个按钮将传递空的 Bundle,即使用 bundle.clear() 清除 Bundle,然后将 Bundle 传递给 Intent。下面给出了 activity_main.xml 文件的完整代码。在这里,我们可以看到第一个按钮用于传递非空的 Bundle,而第二个按钮用于传递空的 Bundle。
XML
“
<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:layoutwidth="matchparent"
android:layoutheight="matchparent"
android:padding="10dp"
tools:context=".MainActivity">
<Button
android:id="@+id/btnPassBundles"
android:layout_width="275dp"
android:layout_height="101dp"
android:layout_marginTop="250dp"
android:text="Pass Data Into Bundle"
android:textSize="24sp"
app:layoutconstraintHorizontalbias="0.498"
app:layoutconstraintLefttoLeftOf="parent"
app:layoutconstraintRighttoRightOf="parent"
app:layoutconstraintToptoTopOf="parent" />
<Button
android:id="@+id/btnNoPassBundle"
android:layout_width="277dp"