zxing onActivityResult n'est pas appelé dans Fragment uniquement dans Activity
Je vais avoir quelques problèmes avec zxing onActivityResult().
Comme vous pouvez le voir dans le code je l'ai fait correctement invoquer de nouveaux intention comme décrit dans https://code.google.com/p/zxing/wiki/ScanningViaIntent.
La question est de savoir comment puis-je attraper onActivityResult() dans le Fragment, car j'ai besoin de ces données dans mon Fragmnet et pas dans l'Activité?
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
}
}
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, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
System.out.println("the code is catch");
}
}
source d'informationauteur 5er
Vous devez vous connecter pour publier un commentaire.
Comme
Martynnw
a souligné le problème est d'appelerfragment.startActivityForResult
au lieu deactivity.startActivityForResult
. Utilisez donc la prochaine wrapper:Si quelqu'un a le même problème, voici ma solution.
intégrateur.initiateScan();
Modifier la ligne ci-dessus comme
intégrateur.forSupportFragment(fragment_name.c').initiateScan();
Projet Alternatif (ZXing Android Embarqué):
Et de mettre en œuvre sur l'Activité:
plus d'infos et options
Assurez-vous que
OnActivityResult
dans votreActivity
appellesuper.OnActivityResult()
. Qui doit s'assurer qu'il est appelé sur leFragment
.Alternativement, vous pouvez modifier la
IntentIntegrator
code de sorte qu'il appelleStartActivityResult
sur leFragment
soit en passant par le fragment du constructeur, ou de le transmettre àinitiateScan
.Une solution : Un exemple de base de la façon dont vous pouvez gérer
Activité Principale
Fragment 1
Fragment 2
Fragment x