如何使用多个按钮将数据从一个片段传递到另一个片段?

How to pass data from fragment to fragment using multiple buttons?

我有两个片段,Fragment-1 和 Fragment-2,在我的 Fragment-1 中我有三个按钮,在每个按钮的侦听器中我使用 bundle 发送数据,并试图进入 Fragment-2,但是应用程序崩溃并出现空指针异常

片段 1

 rl.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    All_Products tf = new All_Products();
                    Bundle bundle = new Bundle();
                    bundle.putString("catagory_name", "All");

                    tf.setArguments(bundle);
                    android.app.FragmentManager fm = getActivity().getFragmentManager();
                    android.app.FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.container_body, tf);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);
                    ft.commit();
                }
            });

            rl1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    All_Products tf = new All_Products();
                    Bundle bundle = new Bundle();


                    bundle.putString("jorel", proidslug1);


                    tf.setArguments(bundle);
                    android.app.FragmentManager fm = getActivity().getFragmentManager();
                    android.app.FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.container_body, tf);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);
                    ft.commit();

                }
            });
            rl2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    All_Products tf = new All_Products();
                    Bundle bundle = new Bundle();
                        bundle.putString("bestseller", proidslug2);
                    tf.setArguments(bundle);
                    android.app.FragmentManager fm = getActivity().getFragmentManager();
                    android.app.FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.container_body, tf);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);
                    ft.commit();

                }
            });

片段 2

Bundle bundle=this.getArguments();
        cname=bundle.getString("catagory_name");
        System.out.println("all >>>>>" + cname);

        Bundle b1=this.getArguments();
        jorlenm=b1.getString("jorel");
        System.out.println("jorel>>>>>" + jorlenm);


     if(cname.equals(bundle.getString("catagory_name")))
            {
                Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();

            }

           else if(jorlenm.equals(bundle.getString("jorel")))
            {
                Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();


            }

如果您单击 rl1 按钮,则传递给捆绑包的数据带有密钥 jorel

那么带有键 category_name 的 bundle 中的值将是 null。然后通过使用空值检查你可能会得到一个异常。

所以你必须检查它是否null

试试这个

    String cname = bundle.getString("catagory_name");
    String jorelnm = bundle.getString("jorel");
    String bestseller = bundle.getString("bestseller");

    if (cname != null) {
        Toast.makeText(getActivity(), cname, Toast.LENGTH_LONG).show();
    } else if (jorlenm != null) {
        Toast.makeText(getActivity(), jorlenm, Toast.LENGTH_LONG).show();
    } //..

正如@boss 建议的那样,当 3 个按钮发送互斥数据时,您需要有 null 检查器。

    Bundle bundle=this.getArguments();
    cname=bundle.getString("catagory_name");
    jorlenm=bundle.getString("jorel");

 if(cname != null)
        { 
            Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();

        } 

       else if(jorlenm != null)
        { 
            Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();

        }