Android如何将捆绑包发送到其他活动?
问题描述:
我想从一个活动发送一个捆绑到另一个。当我在接收活动中加载包时,所有信息似乎都是空的。下面是一些代码:Android如何将捆绑包发送到其他活动?
BaseActivity.java
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) { // 사이드 바에서 선택한 리스트 동작
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);
}
};
MusicPlayerActivity.java
@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());
}
我要发送的mediaExtras捆绑在BaseActivity类到另一个活动时,我点击一些按钮。你可以在BaseActivity中看到这个部分。
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;
我试图把字符串信息放到mediaExtras中。但是,当我试图得到这个,我刚刚得到一个空值。
this.getIntent().getExtras().getString(SAVED_MEDIA_ID)
请告诉我该怎么解决呢
答
您有以下几种选择:
1)从意图使用软件包:
Intent mIntent = new Intent(this, Example.class);
Bundle extras = mIntent.getExtras();
extras.putString(key, value);
2)创建一个新的包
Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.putString(key, value);
mIntent.putExtras(mBundle);
3)使用的意图
Intent mIntent = new Intent(this, Example.class);
mIntent.putExtra(key, value);
的putExtra()的快捷方法然后,在推出的活动中,您可以通过以下方式阅读:
String value = getIntent().getExtras().getString(key)
注意:Bundle对所有基本类型,Parcelables和Serializables都有“get”和“put”方法。我只是使用Strings进行演示。
答
首先创建数据bundel并将其连接到意图
Intent mainIntent = new Intent(getApplicationContext(),XXXX.class);
Bundle dataBundle = new Bundle();
dataBundle.putString("keyid","thevalue");
mainIntent.putExtras(dataBundle);
startActivity(mainIntent);
得到这个包在XXXX活动
//getting the datbundel from other activity incoming
Bundle extras = getIntent().getExtras();
String a=extras.getString("keyid");
可能重复[Android \ _如何发送捆绑到其他活动?](http://stackoverflow.com/questions/37799762/android-how-can-i-send-a-bundle-to -otherother-activity) – Arjan
这行是否打印在logcat上? 'Log.d(“123qwer”,“onDrawerClosed,mediaExtras - >”+ SAVED_MEDIA_ID +“”+ MEDIA_ID_MUSICS_BY_ALBUM);' –
你是什么意思'... putExtras(mediaExtras),extras)'? 'mediaExtras'和'extras'都是Bundle对象。使用一个键作为putExtras中的第一个参数来添加Bundle in Intent,然后使用相同的键在下一个活动中访问Bundle –