将参数从bundle.getString传递给类Paragraph od droidText不起作用

时间:2016-05-25 14:34:58

标签: java android android-fragments android-studio parameter-passing

我不知道为什么变量myInt在我的代码中的某些地方为空。

在这些行中没关系,因此变量不为null:

myInt = bundle2.getString("scelta2", null);
titolo3.setText(myInt);

当我在myInt中使用变量Paragraph p1=new Paragraph(myInt);时,它为空。

可能是什么问题?

先谢谢大家!

TwoFragment.java

public class TwoFragment extends Fragment{

                private View v;
                Intent chooser=null;
                String myInt="";

                public TwoFragment() {
                    // Required empty public constructor
                }

                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                }

                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                         Bundle savedInstanceState) {
                    // Inflate the layout for this fragment
                    View rootView = inflater.inflate(R.layout.fragment_two, container, false);
                    Button mButton = (Button) rootView.findViewById(R.id.newbutton);
                    mButton.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {

                            //sendemail();
                            createPDF();
                            viewPDF();



                        }
                    });
                    TextView titolo3 = (TextView)rootView.findViewById(R.id.result);
                    TextView titolo2 = (TextView)rootView.findViewById(R.id.result2);
                    TextView titolo4 = (TextView)rootView.findViewById(R.id.resultpizze);

                    //TextView titolo = (TextView)rootView.findViewById(R.id.quantità3);

                  /*  Bundle bundle2=getArguments();
                    if(bundle2 != null){
                        String string = bundle2.getString("scelta2", null);
                        titolo3.setText(string);
                    }*/

                    Bundle bundle2=getArguments();
                    if(bundle2 != null){
                        myInt = bundle2.getString("scelta2", null);
                       titolo3.setText(myInt);
                    }

                    Bundle bundle3=getArguments();
                    if(bundle3 != null){
                       // String myInt3 = bundle3.getString("totalebirre", null);
                       //  cazzo2=Integer.parseInt(myInt3);
                       int cazzo2=bundle3.getInt("totalebirre");
                        titolo2.setText(String.valueOf(cazzo2));



                    }
                    Bundle bundle=getArguments();
                    if(bundle != null){
                        // String myInt2 = bundle2.getString("totalepizze", null);
                        //   cazzo=Integer.parseInt(myInt2);
                        //titolo2.setText(myInt2);
                        String string=bundle.getString("scelta3", null);
                         titolo4.setText(string);

                    }



                    return rootView;
                }
               /* public void sendemail(){

                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setData(Uri.parse("mailto:"));
                    String[] to={"marco_marcoletto@hotmail.it"};
                    intent.putExtra(Intent.EXTRA_EMAIL,to);
                    intent.putExtra(Intent.EXTRA_SUBJECT, "ciao");
                    intent.putExtra(Intent.EXTRA_TEXT, "zao");
                    intent.setType("message/rfc822");
                    chooser=intent.createChooser(intent,"manda email");
                    startActivity(chooser);
                }*/
               public void createPDF() {

                   Document doc = new Document();

                   try {
                       String path = Environment.getExternalStorageDirectory()
                               .getAbsolutePath() + "/droidText";

                       File dir = new File(path);
                       if (!dir.exists())
                           dir.mkdirs();

                       Log.d("PDFCreator", "PDF Path: " + path);

                       File file = new File(dir, "sample.pdf");
                       FileOutputStream fOut = new FileOutputStream(file);

                       PdfWriter.getInstance(doc, fOut);

                       // open the document
                       doc.open();
                       ByteArrayOutputStream stream = new ByteArrayOutputStream();
                       Bitmap bitmap = BitmapFactory.decodeResource(getContext()
                               .getResources(), R.drawable.androtuto);
                       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                       Image myImg = Image.getInstance(stream.toByteArray());
                       myImg.setAlignment(Image.MIDDLE);

                       // add image to document
                       doc.add(myImg);

                       Paragraph p1 = new Paragraph(myInt);
                   Log.d("ciao",myInt);

                       Font paraFont = new Font(Font.COURIER);
                       p1.setAlignment(Paragraph.ALIGN_CENTER);
                       p1.setFont(paraFont);

                       // add paragraph to document
                       doc.add(p1);

                       Paragraph p2 = new Paragraph("Ciao");
                       Font paraFont2 = new Font(Font.COURIER, 14.0f, Color.GREEN);
                       p2.setAlignment(Paragraph.ALIGN_CENTER);
                       p2.setFont(paraFont2);

                       doc.add(p2);

                       stream = new ByteArrayOutputStream();
                       bitmap = BitmapFactory.decodeResource(getContext()
                               .getResources(), R.drawable.android);
                       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                       myImg = Image.getInstance(stream.toByteArray());
                       myImg.setAlignment(Image.MIDDLE);

                       // add image to document
                       doc.add(myImg);

                       // set footer
                       Phrase footerText = new Phrase("Pied de page ");
                       HeaderFooter pdfFooter = new HeaderFooter(footerText, false);
                       doc.setFooter(pdfFooter);

                   } catch (DocumentException de) {
                       Log.e("PDFCreator", "DocumentException:" + de);
                   } catch (IOException e) {
                       Log.e("PDFCreator", "ioException:" + e);
                   } finally {
                       doc.close();
                   }

               }
                public void viewPDF(){
                    String path = "/sdcard/droidText/sample.pdf";
                    File targetFile = new File(path);
                    Uri targetUri = Uri.fromFile(targetFile);

                    Intent intent;
                    intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(targetUri, "application/pdf");

                    startActivity(intent);
                }

            }

ThreeFragment.java
从我通过变量的碎片:

public class ThreeFragment extends Fragment implements
        android.widget.CompoundButton.OnCheckedChangeListener {

    ListView lv2;
    ArrayList<Planet> planetList;
    ListView lv;

    ArrayList<Birra> birraList;
    BirraAdapter biAdapter;
    PlanetAdapter plAdapter;
    Planet p;
    String myInt="";



    PlanetAdapter.PlanetHolder holder;


    public ThreeFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_three, container, false);

        Button mButton = (Button) rootView.findViewById(R.id.button2);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                MyListFragment mlf=new MyListFragment();

                mlf.showResult(v);
              // MyListFragment.showResult(v);
                showResult2(v);


            }
        });
        //return inflater.inflate(R.layout.fragment_list2, container, false);
        return rootView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        lv2 = (ListView) getView().findViewById(R.id.listview2);
        displayBirraList();
    }


    private void displayBirraList() {

        birraList = new ArrayList<Birra>();
        birraList.add(new Birra("Paulaner", 6, "€"));
        birraList.add(new Birra("Forst", 7, "€"));
        birraList.add(new Birra("Peroni", 5, "€"));
        birraList.add(new Birra("Corona", 5, "€"));
        birraList.add(new Birra("Nastro Azzurro", 4, "€"));
        biAdapter = new BirraAdapter(birraList, getContext()) {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int pos = lv2.getPositionForView(buttonView);
                if (pos != ListView.INVALID_POSITION) {
                    Birra b = birraList.get(pos);
                    b.setSelected(isChecked);


            /*Toast.makeText(
                getActivity(),
                "Clicked on Pizza: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*/
                }


            }


        };


        lv2.setAdapter(biAdapter);
    }


    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


        /*int pos = lv.getPositionForView(buttonView);
        if (pos != ListView.INVALID_POSITION) {
            Planet p = planetList.get(pos);
            p.setSelected(isChecked);


            *//**//**//**//*Toast.makeText(
                getActivity(),
                "Clicked on Planet: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*//**//**//**//*
        }
*/
    }


    public void showResult2(View v) {
        String result = "Selected Product are :";
        int totalAmount = 0;
       // String a = "";


        for (Birra b : biAdapter.getBox()) {

            if (b.selected) {

                result += "\n" + b.name + " " + b.distance + "€" + "q.tà :" + b.getQuantità();
                int quantitaInt = Integer.parseInt(b.getQuantità());
                totalAmount += b.distance * quantitaInt;
              //  a=String.valueOf(totalAmount);


            }
        }
      /*  for (Planet p : plAdapter.getBox()) {
            if (p.isSelected()) {


                result += "\n" + p.getName() + " " + p.getDistance() + "€" + "q.tà :" + p.getQuantità();
                int quantitaInt = Integer.parseInt(p.getQuantità());
                //totalAmount2+=p.distance * quantitaInt;
                //z=String.valueOf(totalAmount2);


            }
        }*/



        Toast.makeText(getActivity(), result + "\n" +myInt + "\n" + "Total Amount:=" + totalAmount + "€", Toast.LENGTH_LONG).show();
           Bundle bun2 = new Bundle();
            bun2.putString("scelta2", result);
            TwoFragment fgsearch2 = new TwoFragment();
            fgsearch2.setArguments(bun2);
            android.support.v4.app.FragmentTransaction transaction2 = getActivity().getSupportFragmentManager().beginTransaction();
            transaction2.replace(R.id.content_main, fgsearch2);
            transaction2.commit();

            Bundle bun = new Bundle();
           // bun.putString("totalebirre", a);
        bun.putInt("totalebirre", totalAmount);
            TwoFragment fgsearch = new TwoFragment();
            fgsearch.setArguments(bun);
            android.support.v4.app.FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.content_main2, fgsearch);
            transaction.commit();




    }
}

主要是致电三个片段:

public class MainBirra extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainbirra);

        getSupportFragmentManager().beginTransaction().

                replace(R.id.fragmentContainer2, new ThreeFragment()).commit();



    }
  /*  @Override protected void onDestroy() {
        SharedPreferences preferences=getSharedPreferences("states", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=preferences.edit();
        editor.clear().apply();
        super.onDestroy();
        Log.e("OnDestroy", " callback_2");

    }*/



}

2 个答案:

答案 0 :(得分:0)

在我看来,你可以创建一个静态的方法来返回你想要启动的片段的内容,在这个方法中,你将在TwoFragment中初始化像myInt这样的变量。 所以在TwoFragment.java中添加这个方法

public static TwoFragment getInstance(String myInt){
TwoFragment twoFragment=new TwoFragment();
twoFragment.myInt=myInt;
return twoFragment;
}

当你需要在其他地方启动片段时,使用此代码代替默认构造函数

public class ThreeFragment extends Fragment implements
        android.widget.CompoundButton.OnCheckedChangeListener {

    ListView lv2;
    ArrayList<Planet> planetList;
    ListView lv;

    ArrayList<Birra> birraList;
    BirraAdapter biAdapter;
    PlanetAdapter plAdapter;
    Planet p;
    String myInt="";



    PlanetAdapter.PlanetHolder holder;


    public ThreeFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_three, container, false);

        Button mButton = (Button) rootView.findViewById(R.id.button2);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                MyListFragment mlf=new MyListFragment();

                mlf.showResult(v);
              // MyListFragment.showResult(v);
                showResult2(v);


            }
        });
        //return inflater.inflate(R.layout.fragment_list2, container, false);
        return rootView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        lv2 = (ListView) getView().findViewById(R.id.listview2);
        displayBirraList();
    }


    private void displayBirraList() {

        birraList = new ArrayList<Birra>();
        birraList.add(new Birra("Paulaner", 6, "€"));
        birraList.add(new Birra("Forst", 7, "€"));
        birraList.add(new Birra("Peroni", 5, "€"));
        birraList.add(new Birra("Corona", 5, "€"));
        birraList.add(new Birra("Nastro Azzurro", 4, "€"));
        biAdapter = new BirraAdapter(birraList, getContext()) {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int pos = lv2.getPositionForView(buttonView);
                if (pos != ListView.INVALID_POSITION) {
                    Birra b = birraList.get(pos);
                    b.setSelected(isChecked);


            /*Toast.makeText(
                getActivity(),
                "Clicked on Pizza: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*/
                }


            }


        };


        lv2.setAdapter(biAdapter);
    }


    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


        /*int pos = lv.getPositionForView(buttonView);
        if (pos != ListView.INVALID_POSITION) {
            Planet p = planetList.get(pos);
            p.setSelected(isChecked);


            *//**//**//**//*Toast.makeText(
                getActivity(),
                "Clicked on Planet: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*//**//**//**//*
        }
*/
    }


    public void showResult2(View v) {
        String result = "Selected Product are :";
        int totalAmount = 0;
       // String a = "";


        for (Birra b : biAdapter.getBox()) {

            if (b.selected) {

                result += "\n" + b.name + " " + b.distance + "€" + "q.tà :" + b.getQuantità();
                int quantitaInt = Integer.parseInt(b.getQuantità());
                totalAmount += b.distance * quantitaInt;
              //  a=String.valueOf(totalAmount);


            }
        }
      /*  for (Planet p : plAdapter.getBox()) {
            if (p.isSelected()) {


                result += "\n" + p.getName() + " " + p.getDistance() + "€" + "q.tà :" + p.getQuantità();
                int quantitaInt = Integer.parseInt(p.getQuantità());
                //totalAmount2+=p.distance * quantitaInt;
                //z=String.valueOf(totalAmount2);


            }
        }*/



        Toast.makeText(getActivity(), result + "\n" +myInt + "\n" + "Total Amount:=" + totalAmount + "€", Toast.LENGTH_LONG).show();

            TwoFragment fgsearch2=TwoFragment.getInstance(result);
            fgsearch2.setArguments(bun2);
            android.support.v4.app.FragmentTransaction transaction2 = getActivity().getSupportFragmentManager().beginTransaction();
            transaction2.replace(R.id.content_main, fgsearch2);
            transaction2.commit();






    }
}

答案 1 :(得分:0)

public class TwoFragment extends Fragment {

    private View v;
    String myInt="";
    int cazzo2;
    String scelta3;

    public TwoFragment() {
        // Required empty public constructor
    }
    public static TwoFragment getInstance(String myInt,int cazzo2,String scelta3){
        TwoFragment twoFragment=new TwoFragment();
        twoFragment.myInt=myInt;
        twoFragment.cazzo2=cazzo2;
        twoFragment.scelta3=scelta3;
        return twoFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_two, container, false);
        Button mButton = (Button) rootView.findViewById(R.id.newbutton);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                //sendemail();
                createPDF();
                viewPDF();



            }
        });
        TextView titolo3 = (TextView)rootView.findViewById(R.id.result);
        TextView titolo2 = (TextView)rootView.findViewById(R.id.result2);
        TextView titolo4 = (TextView)rootView.findViewById(R.id.resultpizze);

        titolo3.setText(myInt);
        titolo2.setText(String.valueOf(cazzo2));
        titolo4.setText(scelta3);

        return rootView;
    }
    /* public void sendemail(){

         Intent intent = new Intent(Intent.ACTION_SEND);
         intent.setData(Uri.parse("mailto:"));
         String[] to={"marco_marcoletto@hotmail.it"};
         intent.putExtra(Intent.EXTRA_EMAIL,to);
         intent.putExtra(Intent.EXTRA_SUBJECT, "ciao");
         intent.putExtra(Intent.EXTRA_TEXT, "zao");
         intent.setType("message/rfc822");
         chooser=intent.createChooser(intent,"manda email");
         startActivity(chooser);
     }*/
    public void createPDF() {

        Document doc = new Document();

        try {
            String path = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/droidText";

            File dir = new File(path);
            if (!dir.exists())
                dir.mkdirs();

            Log.d("PDFCreator", "PDF Path: " + path);

            File file = new File(dir, "sample.pdf");
            FileOutputStream fOut = new FileOutputStream(file);

            PdfWriter.getInstance(doc, fOut);

            // open the document
            doc.open();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            Bitmap bitmap = BitmapFactory.decodeResource(getContext()
                    .getResources(), R.drawable.androtuto);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            Image myImg = Image.getInstance(stream.toByteArray());
            myImg.setAlignment(Image.MIDDLE);

            // add image to document
            doc.add(myImg);

            Paragraph p1 = new Paragraph(myInt);
            Log.d("ciao",myInt);

            Font paraFont = new Font(Font.COURIER);
            p1.setAlignment(Paragraph.ALIGN_CENTER);
            p1.setFont(paraFont);

            // add paragraph to document
            doc.add(p1);

            Paragraph p2 = new Paragraph("Ciao");
            Font paraFont2 = new Font(Font.COURIER, 14.0f, Color.GREEN);
            p2.setAlignment(Paragraph.ALIGN_CENTER);
            p2.setFont(paraFont2);

            doc.add(p2);

            stream = new ByteArrayOutputStream();
            bitmap = BitmapFactory.decodeResource(getContext()
                    .getResources(), R.drawable.android);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            myImg = Image.getInstance(stream.toByteArray());
            myImg.setAlignment(Image.MIDDLE);

            // add image to document
            doc.add(myImg);

            // set footer
            Phrase footerText = new Phrase("Pied de page ");
            HeaderFooter pdfFooter = new HeaderFooter(footerText, false);
            doc.setFooter(pdfFooter);

        } catch (DocumentException de) {
            Log.e("PDFCreator", "DocumentException:" + de);
        } catch (IOException e) {
            Log.e("PDFCreator", "ioException:" + e);
        } finally {
            doc.close();
        }

    }
    public void viewPDF(){
        String path = "/sdcard/droidText/sample.pdf";
        File targetFile = new File(path);
        Uri targetUri = Uri.fromFile(targetFile);

        Intent intent;
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(targetUri, "application/pdf");

        startActivity(intent);
    }

}

和其他片段

public class ThreeFragment extends Fragment implements
        android.widget.CompoundButton.OnCheckedChangeListener {

    ListView lv2;
    ArrayList<Planet> planetList;
    ListView lv;

    ArrayList<Birra> birraList;
    BirraAdapter biAdapter;
    PlanetAdapter plAdapter;
    Planet p;
    String myInt="";



    PlanetAdapter.PlanetHolder holder;


    public ThreeFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_three, container, false);

        Button mButton = (Button) rootView.findViewById(R.id.button2);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                MyListFragment mlf=new MyListFragment();

                mlf.showResult(v);
                // MyListFragment.showResult(v);
                showResult2(v);


            }
        });
        //return inflater.inflate(R.layout.fragment_list2, container, false);
        return rootView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        lv2 = (ListView) getView().findViewById(R.id.listview2);
        displayBirraList();
    }


    private void displayBirraList() {

        birraList = new ArrayList<Birra>();
        birraList.add(new Birra("Paulaner", 6, "€"));
        birraList.add(new Birra("Forst", 7, "€"));
        birraList.add(new Birra("Peroni", 5, "€"));
        birraList.add(new Birra("Corona", 5, "€"));
        birraList.add(new Birra("Nastro Azzurro", 4, "€"));
        biAdapter = new BirraAdapter(birraList, getContext()) {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int pos = lv2.getPositionForView(buttonView);
                if (pos != ListView.INVALID_POSITION) {
                    Birra b = birraList.get(pos);
                    b.setSelected(isChecked);


            /*Toast.makeText(
                getActivity(),
                "Clicked on Pizza: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*/
                }


            }


        };


        lv2.setAdapter(biAdapter);
    }


    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


        /*int pos = lv.getPositionForView(buttonView);
        if (pos != ListView.INVALID_POSITION) {
            Planet p = planetList.get(pos);
            p.setSelected(isChecked);


            *//**//**//**//*Toast.makeText(
                getActivity(),
                "Clicked on Planet: " + p.getName() + ". State: is "
                        + isChecked, Toast.LENGTH_SHORT).show();*//**//**//**//*
        }
*/
    }


    public void showResult2(View v) {
        String result = "Selected Product are :";
        int totalAmount = 0;
        // String a = "";


        for (Birra b : biAdapter.getBox()) {

            if (b.selected) {

                result += "\n" + b.name + " " + b.distance + "€" + "q.tà :" + b.getQuantità();
                int quantitaInt = Integer.parseInt(b.getQuantità());
                totalAmount += b.distance * quantitaInt;
                //  a=String.valueOf(totalAmount);


            }
        }
      /*  for (Planet p : plAdapter.getBox()) {
            if (p.isSelected()) {


                result += "\n" + p.getName() + " " + p.getDistance() + "€" + "q.tà :" + p.getQuantità();
                int quantitaInt = Integer.parseInt(p.getQuantità());
                //totalAmount2+=p.distance * quantitaInt;
                //z=String.valueOf(totalAmount2);


            }
        }*/



        Toast.makeText(getActivity(), result + "\n" +myInt + "\n" + "Total Amount:=" + totalAmount + "€", Toast.LENGTH_LONG).show();
        TwoFragment fgsearch2 = TwoFragment.getInstance(result,totalAmount,"test");
        android.support.v4.app.FragmentTransaction transaction2 = getActivity().getSupportFragmentManager().beginTransaction();
        transaction2.replace(R.id.content_main, fgsearch2);
        transaction2.commit();




    }
}