将数据(ArrayList和Int)从Adapter传递给AlertDialog

问题描述 投票:0回答:1

我有CustomDialog类扩展DialogFragment。我想从我的适配器获取ArrayList。我有这个例外java.lang.NullPointerException:当我尝试运行时,尝试在空对象引用上调用虚方法'java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)'。

holder.choisirButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int positionselected = menuItem.getId();
        Bundle bundle = new Bundle();
        bundle.putSerializable("menuItemList", menuItemList);
        bundle.putInt("positionselected", positionselected);
        FragmentActivity activity = (FragmentActivity) (context);
        FragmentManager fm = activity.getFragmentManager();
        ComplementFragment alertDialog = new ComplementFragment();
        alertDialog.show(fm, "fragment_alert");
    }
});

public class ComplementFragment extends DialogFragment {

    ArrayList<MenuItem> menuItemsList;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.custom_dialog_layout, container);

        menuItemList = (ArrayList<MenuItem>) getArguments().getSerializable("menuItemList");
        int selectedPosition = getArguments().getInt("positionselected");
        MenuItem menuItem = menuItemList.get(selectedPosition);
        return view;
    }
}
android serializable dialogfragment
1个回答
0
投票

你需要在将数组放入bundle时强制序列化。你可以查看here的答案。或者您可以使用方法创建自定义对话框并在该方法中接收数组作为参数。检查here的代码。虽然解决问题的最佳方法是使用parceable。有关使用parcelable的详细信息,请访问herehere。要使用parcelable将数据传递给片段,请检查this答案。我希望我的回答很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.