Rod Kimble
Rod Kimble

Reputation: 1364

send String from Activity to Fragments EditText

There is a button in my ListViewFragment who initiates a Scan. I scan the serialnumber and get the String in My MainActivities onActivityResult method (There is another Scan in my MainActivity. I get the string and I want to send the string back to my ListViewFragmentto set it in an EditText. But I get a NullPointerException because my ListViewFragmentwants to get the serialFromScanString wich is empty. How can I provide that my Fragment calls the bundle AFTER the Serial was scanned?

Fragment:

inputSerial = (EditText) view.findViewById(R.id.editText_serial);
        ImageButton ib = (ImageButton) view.findViewById(R.id.button_scan_serial);
        ib.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A");
                getActivity().startActivityForResult(intent, 11);

                Bundle b = getArguments();
                String serialFromScan = b.getString("serialFromScan");
                Log.d("Seriennummerangekommen?", serialFromScan);


            }
        });

MainActivity:

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.scanbutton);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent,10);
        }
    });

[...]

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

            if (resultCode == RESULT_OK) {
                String scanContent = intent.getStringExtra("SCAN_RESULT");
                String scanFormat = intent.getStringExtra("SCAN_RESULT_FORMAT");
                Log.d("INHALT", scanContent);
                Log.d("FORMAT", scanFormat);

                switch (requestCode){
                    case (10):{
                        String[] Split = scanContent.split("\\s");
                        String product = Split[0];
                        String label = Split[1];
                        String serial = Split[2];
                        String mac = Split[3];
                        String daaid = Split[4];
                        String bill = Split[5];

                        mydb.insertData(product, label, serial, mac, daaid, bill);
                        break;
                    }
                    case (11):{

                            scannedResult = scanContent;
                            serialScanned = true;
                            Bundle b = new Bundle();
                            b.putString("serialFromScan", scanContent);
                            ListViewFragment LvF = new ListViewFragment();
                            LvF.setArguments(b);

                        break;
                    }
                }
            } else if (resultCode == RESULT_CANCELED) {

                Log.d("TEST", "result_canceled");
            }

    }

Upvotes: 0

Views: 592

Answers (2)

Gopal
Gopal

Reputation: 570

getActivity().startActivityForResult(intent, 11);

Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

and in Fragment onCreateView method:

Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
String strtext = getArguments().getString("edttext");    
return inflater.inflate(R.layout.fragment, container, false);
}

Upvotes: 1

Gopal
Gopal

Reputation: 570

write the startActivityForResult() after the bundle initialised. try this answer..

inputSerial = (EditText) view.findViewById(R.id.editText_serial);
    ImageButton ib = (ImageButton) view.findViewById(R.id.button_scan_serial);
    ib.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A");

            Bundle b = getArguments();
getActivity().startActivityForResult(intent, 11);

            String serialFromScan = b.getString("serialFromScan");
            Log.d("Seriennummerangekommen?", serialFromScan);


        }
    });

Upvotes: 2

Related Questions