将ArrayLists放入Bundle
并为将接收它的片段设置参数的方法
public void finishButtonPressed(){
ivFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MusicFragment fragment = new MusicFragment();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("prgmUri", prgmUri);
bundle.putStringArrayList("prgmName", prgmName);
bundle.putStringArrayList("prgmNumber", prgmNumber);
fragment.setArguments(bundle);
Intent intent = new Intent(getApplicationContext(), WorkoutPreStart.class);
startActivity(intent);
}
});
}
必须接收ArrayLists的片段
public class MusicFragment extends Fragment{
MediaPlayer mediaPlayer;
ImageView ivBack;
ImageView ivPlay;
ImageView ivNext;
TextView tvTitle;
ArrayList<String> prgmName;
ArrayList<String> prgmNumber;
ArrayList<Uri> prgmUri;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_music, container, false);
ivBack = (ImageView) view.findViewById(R.id.ivBack);
ivPlay = (ImageView) view.findViewById(R.id.ivPlay);
ivNext = (ImageView) view.findViewById(R.id.ivNext);
tvTitle = (TextView) view.findViewById(R.id.tvTitle);
mediaPlayer = new MediaPlayer();
prgmName = new ArrayList<>();
prgmNumber = new ArrayList<>();
prgmUri = new ArrayList<>();
int namesize = prgmName.size();
Log.v("namesize: ", prgmName.size()+ "");
for(int i = 0; i<namesize; i++) {
Log.v("Name: ", prgmName.get(i));
}
return view;
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
if(bundle != null) {
prgmName = bundle.getStringArrayList("prgmName");
prgmUri = bundle.getParcelableArrayList("prgmUri");
prgmNumber = bundle.getStringArrayList("prgmNumber");
}
Toast toast = Toast.makeText(getActivity(), prgmName.get(1) +"", Toast.LENGTH_SHORT);
toast.show();
super.onActivityCreated(savedInstanceState);
}}
我认为拥有一个空ArrayList的原因是onCreateView中的一部分:
mediaPlayer = new MediaPlayer();
prgmName = new ArrayList<>();
prgmNumber = new ArrayList<>();
prgmUri = new ArrayList<>();
但如果我不这样做,我会得到NullpointerException
。即使这个问题很容易,请帮帮我,因为我已经花了10多个小时试图解决这个问题......: