Reputation: 1364
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 ListViewFragment
to set it in an EditText
. But I get a NullPointerException because my ListViewFragment
wants to get the serialFromScan
String 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
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
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