2015-01-04 114 views
1

我正从一个Activity1到Activity2接收DataTransferBetweenActivity对象。 Activity2具有ViewPager和ViewPager内我有3个片段。这里是我的适配器类为ViewPager将活动中的对象传递给ViewPager,然后传递给片段

public class MusicPlayerTabAdapter extends FragmentPagerAdapter { 
    private DataTransferBetweenActivity data; 
    private String PARCEL_KEY = "data"; 
    public MusicPlayerTabAdapter(FragmentManager fm, DataTransferBetweenActivity data) { 
     super(fm); 
     this.data = data; 
     ArrayList list = data.getSongsList(); 
     Iterator<Song> it = list.iterator(); 
     while(it.hasNext()) { 
      Log.i("Reached", it.next().getTitle()); 
     } 
    } 

    @Override 
    public Fragment getItem(int index) { 
     switch (index) { 
      case 0: 
       Bundle bundle = new Bundle(); 
       bundle.putParcelable(PARCEL_KEY, data); 
       NowPlayingFragment nowPlayingFragment = new NowPlayingFragment(); 

       nowPlayingFragment.setArguments(bundle); 

       return nowPlayingFragment; 
      case 1: 
       return new EqualizerFragment(); 
      case 2: 
       return new LyricsFragment(); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

NowPlayingFragment类中我得到空从getArguments代码NOW()。建议正确的方法来做到这一点。这里是我的NowPlayingFragment

代码
public class NowPlayingFragment extends Fragment { 
    private ArrayList<Song> songsList; 
    private int position; 
    private String PARCEL_KEY = "data"; 
    private Bundle bundle = getArguments(); 
    private DataTransferBetweenActivity data = bundle.getParcelable(PARCEL_KEY); 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.nowplaying_layout, container, false); 
//  songsList = data.getSongsList(); 
//  position = data.getPosition(); 
     if(bundle == null) 
     Log.i("Received DATA", "HELLO"); 
     return view; 
    } 
} 

还有一个建议,我需要的是,我会加入我的活性2 MediaPlayerControls,我想改变这首歌时,我选择NowPlayingFragment这将是具有的歌曲列表中的歌曲。 建议正确的方法来构建此功能。

+0

你应该调用'getArguments()'在片段 – akash93 2015-01-04 12:43:55

回答

2

您打电话太早。

你应该用某种方法初始化变量private Bundle bundle。例如,在onCreate()

public class NowPlayingFragment extends Fragment { 
    private ArrayList<Song> songsList; 
    private int position; 
    private String PARCEL_KEY = "data"; 
    private Bundle bundle; 
    private DataTransferBetweenActivity data; 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     bundle = getArguments(); 
     data = bundle.getParcelable(PARCEL_KEY); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.nowplaying_layout, container, false); 
//  songsList = data.getSongsList(); 
//  position = data.getPosition(); 
     if(bundle == null) 
     Log.i("Received DATA", "HELLO"); 
     return view; 
    } 
} 
+0

它工作的'onCreate'方法。谢谢 :) – 2015-01-04 13:29:23