android – zxing onActivityResult仅在“活动”中仅在片段中调用

前端之家收集整理的这篇文章主要介绍了android – zxing onActivityResult仅在“活动”中仅在片段中调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在zxing onActivityResult()中遇到一些问题.

正如您可以在代码中看到的,我已经正确地调用https://code.google.com/p/zxing/wiki/ScanningViaIntent所述的新意图.

问题是如何在Fragment中捕获onActivityResult(),因为我需要Fragmnet中的这些数据而不是Activity?

@H_301_6@package com.example.testingcodereading; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class MainFragment extends Fragment { private Button mButtonXZing; @Override public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){ View v = inflater.inflate(R.layout.fragment_main,parent,false); mButtonXZing = (Button) v.findViewById(R.id.button_xzing); mButtonXZing.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { IntentIntegrator integrator = new IntentIntegrator(getActivity()); integrator.initiateScan(); } }); return v; } @Override public void onActivityResult(int requestCode,int resultCode,Intent intent) { System.out.println("never here"); IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,intent); if (scanResult != null) { // handle scan result } // else continue with any other code you need in the method } } @H_301_6@public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm = getSupportFragmentManager(); Fragment f = fm.findFragmentById(R.id.fragmentContainer); if(f == null){ f = new MainFragment(); fm.beginTransaction() .add(R.id.fragmentContainer,f) .commit(); } } @Override protected void onActivityResult(int requestCode,Intent intent) { super.onActivityResult(requestCode,intent); System.out.println("the code is catch"); } }

解决方法

正如Martynnw指出的那样,问题是调用fragment.startActivityForResult而不是activity.startActivityForResult.所以只需使用下一个包装: @H_301_6@import android.content.Intent; import android.support.v4.app.Fragment; import com.google.zxing.integration.android.IntentIntegrator; public final class FragmentIntentIntegrator extends IntentIntegrator { private final Fragment fragment; public FragmentIntentIntegrator(Fragment fragment) { super(fragment.getActivity()); this.fragment = fragment; } @Override protected void startActivityForResult(Intent intent,int code) { fragment.startActivityForResult(intent,code); } }

猜你在找的Android相关文章