0

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

在这些行中没关系,所以变量不为空:

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

当我在中使用变量myIntParagraph 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");

    }*/



}
4

2 回答 2

0

bundle.getString(String key, String defaultValue) 的文档说:

返回与给定键关联的值,如果给定键不存在所需类型的映射,或者如果空值与给定键显式关联,则返回 defaultValue。

 * @param key a String, or null
 * @param defaultValue Value to return if key does not exist or if a null
 *     value is associated with the given key.
 * @return the String value associated with the given key, or defaultValue
 *     if no valid String object is currently mapped to that key.

所以,在你的情况下,问题在于捆绑包没有那个密钥。

你可以试试这个:

        Bundle bun2 = new Bundle();
        bun2.putString("scelta2", result);
        TwoFragment fgsearch2 = new TwoFragment();

        if(fgsearch2 .getArguments() != null){
           fgsearch2 .getArguments().clear();
           fgsearch2 .getArguments().putAll(bun2);
        }else{
            fgsearch2 .setArguments(bun2);
        }
        android.support.v4.app.FragmentTransaction transaction2=getActivity().getSupportFragmentManager().beginTransaction();
        transaction2.replace(R.id.content_main, fgsearch2);
        transaction2.commit();        
于 2016-05-25T12:05:15.723 回答
0

您可以开发您的应用程序,例如:

为了从您的活动中调用片段,我创建了类似的方法

addFragment(new Fragment1().setArguments("String values"));

addFramgent 方法如下所示:

public void addFragment(Fragment fragment) {
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.mainfragment, fragment).addToBackStack(fragment.toString()).commit();
}

您将在片段中接收字符串值,例如:

class Fragment1 extends Fragment{
    String value;
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_user, container, false);
        Log.e("","Value:"+value);
        return view;
    }
    public Fragment setArguments(String value) {
        this.value = value;
        return this;
    }
}
于 2016-05-25T12:30:40.870 回答