标题后边(1)的意思是,这个不是唯一的方法,大神说有第二种,所以先写一个能用的。
关于扫描二维码的代码,可以从前几天写的获取到:http://blog.csdn.net/csdn_loveqingqing/article/details/69569445
因为fragment可以开启扫描的页面,但是获取返回值的方法不会被调用,所以将开启扫描页面,接收扫描结果的方法都放在activity中,
在使用的时候new一个activity的对象,调用扫描的方法。在接收到返回值的时候发送一个广播,到fragment中去接收。
public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (intentResult != null) { if (intentResult.getContents() == null) { } else { String result = intentResult.getContents(); // DiscoverFragment fragment = new DiscoverFragment(); // fragment.setResult(result); Intent intent = new Intent(); intent.setAction("com.gasFragment"); // 设置你这个广播的action intent.putExtra("result",result); sendBroadcast(intent); Log.i("log", "进入onActivityResult" + result); } } }接收:
在fragment中:
private ReceiveBroadCast receiveBroadCast; @Override public void onAttach(Activity activity) { /** 注册广播 */ receiveBroadCast = new ReceiveBroadCast(); IntentFilter filter = new IntentFilter(); filter.addAction("com.gasFragment"); //只有持有相同的action的接受者才能接收此广播 activity.registerReceiver(receiveBroadCast, filter); super.onAttach(activity); } class ReceiveBroadCast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String gasname = intent.getExtras().getString("result"); Log.i("log","在discoverFragment中获取的扫描值"+ gasname); } }
第二种方法
(也可以在获取到返回值后,new一个fragment对象,在fragment对象中设置一个接收返回值的方法去接受);
接受到返回信息之后
DiscoverFragment fragment = new DiscoverFragment(); fragment.setResult(result);fragment的setResult(result)方法
public String result ; public void setResult(String res){ this.result = res; /*扫描返回的结果*/ ToastUtil.showToast("在discoverFragment中显示的"+result); }
为什么在fragment中onActivityResult()方法不会调用呢?
其实第一次是调用的,在跳转页面的时候,有一个16位的requestCode,第一次调用返回的值是正确的,但是第二次就没有用了。
因为requestCode使用一次就会 加1,第二次的requestCode,就不是第一次请求的那个requestCode,但是接收的时候还是用的第一次的reuqestCode来接收,就什么也接收不到。等待大神的重量级方法。