通过Bundle传递给Fragment后,ArrayList为空

时间:2017-11-21 12:39:17

标签: java android android-fragments arraylist

将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多个小时试图解决这个问题......:

1 个答案:

答案 0 :(得分:1)

问题是您没有将创建的MusicFragment添加到您的活动中。 您可以在2 ways中执行此操作:

  • 动态地通过FragmentTransaction
  • 静态通过活动的布局文件

我认为您的MusicFragment已添加到活动布局的WorkoutPreStart中。在这种情况下,您可以将捆绑包添加到活动的意图中,然后将pass添加到活动的片段中。