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

时间:2018-01-03 15:20:28

标签: android serializable dialogfragment

我有一个扩展DialogFragment的CustomDialog类。我想从我的适配器获取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;
    }
}

1 个答案:

答案 0 :(得分:0)

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