2015-04-16 3 views
0

Я хочу просто использовать zxing сканер штрих-кода в проект, для этого действия я использую this tutorial для реализации штрих-кода в проекте, этот учебник использует два класса Zxing в проекте, в моем приложении я не есть активность, и я использую Fragment, к сожалению, я не смог получить данные от onActivityResult получить scanContent штрихкода:Android, использующий onActivityResult внутри фрагмента

public class FragmentAddNewWayBill extends Fragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     G.currentActivity = FragmentAddNewWayBill.this.getActivity(); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_new_waybill, container, false); 

     view.findViewById(R.id.imgv_scan_barcode).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       IntentIntegrator scanIntegrator = new IntentIntegrator(G.currentActivity); 
       scanIntegrator.initiateScan(); 
      } 
     }); 
     return view; 
    } 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
     if (scanningResult != null) { 
      String scanContent = scanningResult.getContents(); 
      String scanFormat = scanningResult.getFormatName(); 
      Log.e("barcode is: ", scanContent); 
      Toast.makeText(G.currentActivity,scanContent, Toast.LENGTH_SHORT).show(); 
     } 
     else{ 
      Log.e("No scan data received! ", ""); 
      Toast toast = Toast.makeText(G.currentActivity,"No scan data received!", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 
    @Override 
    public void onPause() { 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
    } 
} 
+0

Что именно случилось? – Nick

ответ

0

Реализация будет зависеть от того, как называется startactivityforresult. Надежность startactivityforresult вызывается из библиотеки и ее вызова, поскольку она вызывает активность. Таким образом, requestCode, resultCode будет правильным в активности onActivityResult. Итак, переместите код onActivityResult в Activty, все работает.

Если getActivity(). Startactivityforresult вызывается, то он вызывает из Фрагмента. то onActivityResult должен работать нормально.

+0

спасибо, сэр, к сожалению, я не мог использовать 'getActivity(). StartActivity();' какой параметр этой функции сэр? У меня нет намерения в фрагменте, чтобы начать это –

+0

Просто переместите код onActivityResult в класс активности, все работает –

0

Я также имел проблемы ж/читателя ZXing Штрихкод если и нужно сканировать QR-коды, я бы recoment на Qr-Droid API его очень просто, и вы можете запустить его без проблем из фрагмента

public class SrnSuche extends Fragment { 
     Context context; 
    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      final View rootView = inflater.inflate(R.layout.fragment_srnsuche, container, false); 

      Button Button_such = (Button) rootView.findViewById(R.id.button_suchen); 
      Button Button_scan = (Button) rootView.findViewById(R.id.button_scan); 
      context = rootView.getContext(); 

      Button_scan.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 




        Intent qrDroid = new Intent("la.droid.qr.scan"); 
        qrDroid.putExtra("la.droid.qr.complete" , true); 
        try { 
        startActivityForResult(qrDroid, 0); 
         //ja=true; 
        } catch (ActivityNotFoundException activity) { 
         // ja=false; 
         qrDroidRequired(getActivity()); 
        } 
       } 
      }); 
    } 
      return rootView; 
     public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
//retrieve scan result 
     /* 
     IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
     if (scanningResult != null) { 
      String scanContent = scanningResult.getContents(); 
      Toast toast = Toast.makeText(context, 
       "SCAN THERE "+scanContent, Toast.LENGTH_SHORT); 
      Intent i = new Intent(context, Historie_Activity.class); 
      i.putExtra("value_seriennummer", scanContent); 
      startActivity(i); 
      toast.show(); 


     }else{ 
      Toast toast = Toast.makeText(context, 
        "No scan data received!", Toast.LENGTH_SHORT); 
      toast.show(); 
     }*/ 

if (intent!= null){ 
     String result = intent.getExtras().getString("la.droid.qr.result"); 
     if (result != null) { 

      Toast toast = Toast.makeText(context, 
        "SCAN THERE "+result, Toast.LENGTH_SHORT); 
      Intent i = new Intent(context, Historie_Activity.class); 
      i.putExtra("value_seriennummer", result); 
      startActivity(i); 
      toast.show(); 


     }else{ 
      Toast toast = Toast.makeText(context, 
        "No scan data received!", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
} 
    } 
} 

ссылка на QR-Droid API click

0

У меня была такая же проблема с использованием библиотеки zxing. Итак, вам нужно создать широковещательный приемник в своем фрагменте и зарегистрировать его. Поэтому внутри onActivityResult в вашей активности вы отправляете широковещательную рассылку с помощью scanContent и scanformat. Вы получите эти значения в своем широковещательном приемнике, который вы создали во фрагменте.

Смежные вопросы