将数据(ArrayList 和 Int)从适配器传递到 AlertDialog



我有扩展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;
    }
}

在将数组放入捆绑包中时,您需要强制转换可序列化。您可以从此处查看答案。或者,您可以使用某个方法创建自定义对话框,并在该方法中将数组作为参数接收。从这里检查代码。尽管解决它的最佳方法是使用parceable。有关使用可包裹的详细信息,请参阅此处和此处。要使用包裹将数据传递到片段,请查看此答案。我希望我的回答对您有所帮助。

最新更新