Android套件
时间:2020-02-23 14:28:47 来源:igfitidea点击:
在本教程中,我们将讨论有关Android bundle以便在活动之间传递数据的问题。
Android套件
Android Bundle用于在活动之间传递数据。
将要传递的值映射到String键,以后在下一个活动中将其用于检索值。
以下是传入/传出捆绑包的主要类型。
putInt(String key, int value)
,getInt(String key, int value)
putIntArray(String key, int[] value)
,getStringArray(String key, int[] value)
putIntegerArrayList(String key, ArrayList value)
,getIntegerArrayList(String key, ArrayList value value)
putString(String key, String value)
,getString(String key, String value)
putStringArray(String key, String[] value)
,getStringArray(String key, String[] value)
putStringArrayList(String key, ArrayList value)
,getStringArrayList(String key, ArrayList value value)
putLong(String key, long value)
,getLong(String key, long value)
putLongArray(String key, long[] value)
,getLongArray(String key, long[] value)
putBoolean(String key, boolean value)
,getBoolean(String key, boolean value)
putBooleanArray(String key, boolean[] value)
,getBooleanArray(String key, boolean[] value)
putChar(String key, char value)
,getChar(String key, char value)
putCharArray(String key, char[] value)
,getBooleanArray(String key, char[] value)
putCharSequence(String key, CharSequence value)
,getCharSequence(String key, CharSequence value)
putCharSequenceArray(String key, CharSequence[] value)
,getCharSequenceArray(String key, CharSequence[] value)
putCharSequenceArrayList(String key, ArrayList value)
,getCharSequenceArrayList(String key, ArrayList value value)
使用Android套件
捆绑包通过以下方式传递。
Intent intent = new Intent(this,SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("key_1", "MainActivity greeted you with a HI"); bundle.putBoolean("key_2", true); intent.putExtras(bundle); startActivity(intent);
来自Bundle的数据按以下方式在SecondActivity.java
中检索。
Bundle bundle = getIntent().getExtras(); String title = bundle.getString("key_1"); boolean b = bundle.getBoolean("key_2");
如果键没有映射到任何值,则可能导致NullPointerException。
因此,建议为Bundle以及检索到的值添加空检查。
另外,如果映射的键没有任何值,我们也可以设置默认值。
Bundle bundle = getIntent().getExtras(); String title = bundle.getString("key_1", "Default"); boolean b = bundle.getBoolean("key_2", false);
为了从包中删除一个值,通过带有相关键的remove()
方法,如下所示。
bundle.remove("key_2");
要从Bundle中删除所有数据,请在Bundle实例上调用方法clear()。
Android捆绑示例代码
下面给出了" activity_main.xml"布局的代码。
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.theitroad.bundles.MainActivity"> <Button android:id="@+id/btnPassBundles" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PASS BUNDLES" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" <Button android:id="@+id/btnNoPassBundle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PASS NO BUNDLE" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/btnPassBundles" </android.support.constraint.ConstraintLayout>
第一个按钮会将带有数据的捆绑包传递到SecondActivity.java
中,而第二个按钮会将空的捆绑包传递给
下面给出了" activity_second.xml"布局的代码。
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.theitroad.bundles.MainActivity"> <TextView android:id="@+id/txtString" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="String from MainActivity" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" <TextView android:id="@+id/txtBoolean" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Boolean value from MainActivity" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/txtString" </android.support.constraint.ConstraintLayout>
下面给出了MainActivity.java的代码。
package com.theitroad.bundles; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button btnPassBundles, btnNoPassBundle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnPassBundles = findViewById(R.id.btnPassBundles); btnNoPassBundle = findViewById(R.id.btnNoPassBundle); btnPassBundles.setOnClickListener(this); btnNoPassBundle.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnPassBundles: Bundle bundle = new Bundle(); bundle.putString("key_1", "MainActivity greeted you with a HI"); bundle.putBoolean("key_2", true); Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivity(intent); break; case R.id.btnNoPassBundle: bundle = new Bundle(); bundle.putString("key_1", "This string shall be displayed in the SecondActivity"); bundle.putBoolean("key_2", true); bundle.clear(); intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivity(intent); break; } } }
下面给出了" SecondActivity.java"的代码。
package com.theitroad.bundles; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class SecondActivity extends AppCompatActivity { TextView txtString, txtBoolean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); txtString = findViewById(R.id.txtString); txtBoolean = findViewById(R.id.txtBoolean); Bundle bundle = getIntent().getExtras(); txtString.setText(bundle.getString("key_1", "No value from the MainActivity")); txtBoolean.setText("Does bundle contain data? " + bundle.getBoolean("key_2", false)); } }