Android 如何将 Bundle 发送到另一个 Activity?
Android 如何将 Bundle 发送到另一个 Activity?
我正在尝试在一个活动中发送一个包裹(bundle)到另一个活动。当我在接收活动中加载这个包裹时,所有的信息似乎都是空的。以下是一些代码:\nBaseActivity.java\n
private final DrawerLayout.DrawerListener mDrawerListener = new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { if (mDrawerToggle != null) mDrawerToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerOpened(View drawerView) { if (mDrawerToggle != null) { mDrawerToggle.onDrawerOpened(drawerView); } if (getSupportActionBar() != null) getSupportActionBar().setTitle(R.string.app_name); } @Override public void onDrawerClosed(View drawerView) { // When a list is selected from the sidebar if (mDrawerToggle != null) mDrawerToggle.onDrawerClosed(drawerView); if (mItemToOpenWhenDrawerCloses >= 0) { Bundle extras = ActivityOptions.makeCustomAnimation( BaseActivity.this, R.anim.fade_in, R.anim.fade_out).toBundle(); Bundle mediaExtras = new Bundle(); Class activityClass = null; switch (mItemToOpenWhenDrawerCloses) { case R.id.navigation_allmusic: activityClass = MusicPlayerActivity.class; break; case R.id.navigation_album: mediaExtras.putString(SAVED_MEDIA_ID, MEDIA_ID_MUSICS_BY_ALBUM); Log.d("123qwer", "onDrawerClosed, mediaExtras -> " + SAVED_MEDIA_ID + " " + MEDIA_ID_MUSICS_BY_ALBUM); activityClass = MusicPlayerActivity.class; break; case R.id.navigation_playlists: //TODO:add class later // activityClass = PlaceholderActivity.class; break; } if (activityClass != null) { setBundleInfo(mediaExtras); startActivity(new Intent(BaseActivity.this, activityClass).putExtras(mediaExtras), extras); finish(); } } } @Override public void onDrawerStateChanged(int newState) { if (mDrawerToggle != null) mDrawerToggle.onDrawerStateChanged(newState); } };
\nMusicPlayerActivity.java\n
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initializedToolbar(); Log.d("123qwer", "Get Bundle Test " + this.getIntent().getExtras().getString(SAVED_MEDIA_ID)); initializeFromParams(savedInstanceState, getIntent()); }
\n当我点击某个按钮时,我想将BaseActivity类中的mediaExtras包裹发送到另一个活动中。你可以在BaseActivity中看到这部分代码。\n
case R.id.navigation_album: mediaExtras.putString(SAVED_MEDIA_ID, MEDIA_ID_MUSICS_BY_ALBUM); Log.d("123qwer", "onDrawerClosed, mediaExtras -> " + SAVED_MEDIA_ID + " " + MEDIA_ID_MUSICS_BY_ALBUM); activityClass = MusicPlayerActivity.class; break;
\n我尝试将String信息放入mediaExtras中。但是,当我尝试获取时,我只得到了一个空值。\n
this.getIntent().getExtras().getString(SAVED_MEDIA_ID)
\n请教我如何解决这个问题。
原因:这个问题的出现是因为在Android开发中,有时候我们需要在一个Activity中传递数据给另一个Activity。这种情况下,我们可以使用Bundle来打包数据,并通过Intent传递给目标Activity。
解决方法:首先,在发送数据的Activity中,我们需要创建一个Bundle,并将需要传递的数据放入Bundle中。然后,将这个Bundle附加到Intent上,并启动目标Activity。
代码如下:
Intent mainIntent = new Intent(getApplicationContext(), XXXX.class); Bundle dataBundle = new Bundle(); dataBundle.putString("keyid", "thevalue"); mainIntent.putExtras(dataBundle); startActivity(mainIntent);
在接收数据的Activity中,我们需要通过getIntent().getExtras()方法来获取传递过来的Bundle。然后,我们可以从Bundle中提取出我们需要的数据。
代码如下:
// 获取来自其他Activity的数据Bundle Bundle extras = getIntent().getExtras(); String a = extras.getString("keyid");
通过以上的步骤,我们就可以在两个不同的Activity之间传递数据了。这种方式非常灵活,可以传递各种不同类型的数据。