OnActivityResult multiple pour 1 activité
J'ai donc un très simple application que je suis en train de travailler sur. Le but est de collecter des données sur l'actif de 1 pc, et 1 ou 2 moniteurs.
Mon formulaire contient 3 edittext points de vue, et de 3 boutons (un pour chaque actif, je suis à la collecte de données). Les boutons invoquer startActivityForResult pour le scanner de code-barres, puis j'ai envie de passer à la suite de l'associé edittext vue basé sur quel bouton a été pressé (exemple: appuyez sur "scan" bouton à droite de "Asset - PC" edittext, de numérisation et de retourner des données associées edittext. Alors si vous appuyez sur le bouton "scan" c'est à côté de la "Asset - Mon1" edittext, de données de retour à "Asset - Mon1" edittext.... et ainsi de suite...)
Avec le code que j'ai ici, tous les éléments de travail, tout simplement pas comme prévu. Appuyer sur l'un des "scan" boutons renvoie toujours le résultat de la première edittext vue "Asset - PC".
public class TestShit extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void assetPcClick(View view) {
Intent intent1 = new Intent("com.google.zxing.client.android.SCAN");
intent1.setPackage("com.google.zxing.client.android");
intent1.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent1, 0);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetPC = (EditText) findViewById(R.id.assetPC);
assetPC.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
}
public void assetMon1Click(View view) {
Intent intent2 = new Intent("com.google.zxing.client.android.SCAN");
intent2.setPackage("com.google.zxing.client.android");
intent2.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent2, 0);
}
public void onActivityResult2(int requestCode, int resultCode, Intent intent2) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents2 = intent2.getStringExtra("SCAN_RESULT");
String format2 = intent2.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon1 = (EditText) findViewById(R.id.assetMon1);
assetMon1.setText(contents2);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
}
public void assetMon2Click(View view) {
Intent intent3 = new Intent("com.google.zxing.client.android.SCAN");
intent3.setPackage("com.google.zxing.client.android");
intent3.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent3, 0);
}
public void onActivityResult3(int requestCode, int resultCode, Intent intent3) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents3 = intent3.getStringExtra("SCAN_RESULT");
String format3 = intent3.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon2 = (EditText) findViewById(R.id.assetMon2);
assetMon2.setText(contents3);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
}
}
Des suggestions sur comment je peux mieux gérer mes multiples "ActivityForResult" et "onActivityResult" s'?
Ma dose, merci à tous pour votre aide!
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetPC = (EditText) findViewById(R.id.assetPC);
assetPC.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon1 = (EditText) findViewById(R.id.assetMon1);
assetMon1.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
if (requestCode == 2) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon2 = (EditText) findViewById(R.id.assetMon2);
assetMon2.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
}
source d'informationauteur Devin | 2011-02-17
Vous devez vous connecter pour publier un commentaire.
Dans votre
startActivityForResult
ne pas utiliser de 0 sur les deux appels... utiliser différents nombres tels que 0 & 1... ensuite, vous pouvez mettre en œuvre un interrupteur dans votre méthode onActivityResult avec le requestCode. Si le requestCode = 0 alors la première méthode est revenu, si elle est de 1, alors la deuxième est de retour. Ce doit être la même pour plus d'appels.Les appels doivent être quelque chose comme ceci alors:
(Pour la première fois)
(Pour la deuxième fois)
(pour la troisième fois)
(pour la énième fois)
Ou, vous pouvez déclarer static int les valeurs à utiliser, au lieu de la plus méconnaissable valeurs int.
Il n'y a rien dans Android qui ne va jamais à reconnaître et appeler des méthodes nommé onActivityResult2 ou onActivityResult3. Ce sont juste des noms de méthode vous fait d'être ignoré par le système.
Vous avez besoin de changer votre code tel que vous passez à une autre demande de code lorsque vous appelez startActivityForResult(). (requestCode est le 2ème paramètre de la méthode)
Puis dans onActivityResult vérifier le requestCode de voir l'activité qui vous sont obtenir le résultat, et de réagir en conséquence.
Pendant que vous startActivityForResult vous envoyer un requestcode avec elle,
ce devrait être différent(unique) pour chacune de vos activités, vous êtes à partir de votre bouton, dire que le bouton 1 commence de demande de code 1, bouton 2 requestcode = 2, et le bouton 3 code de la demande =3, alors pour votre activité parent, vous devez avoir un seul onActivityResult()
dans cette fonction, prendre un commutateur de cas , analyse requestcodes, requestcode = 1 le résultat de la première activité et de demande de code =2 donne pour l'activité 2 et ainsi de suite...