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) 

请告诉我该怎么解决呢

+0

可能重复[Android \ _如何发送捆绑到其他活动?](http://stackoverflow.com/questions/37799762/android-how-can-i-send-a-bundle-to -otherother-activity) – Arjan

+0

这行是否打印在logcat上? 'Log.d(“123qwer”,“onDrawerClosed,mediaExtras - >”+ SAVED_MEDIA_ID +“”+ MEDIA_ID_MUSICS_BY_ALBUM);' –

+0

你是什么意思'... putExtras(mediaExtras),extras)'? 'mediaExtras'和'extras'都是Bundle对象。使用一个键作为putExtras中的第一个参数来添加Bundle in Intent,然后使用相同的键在下一个活动中访问Bundle –

您有以下几种选择:

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");