2015-01-04 112 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