Autore Topic: startActivityForResult  (Letto 496 volte)

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
startActivityForResult
« il: 28 Dicembre 2014, 18:37:41 CET »
0
Ho un problema con l'uso del metodo startActivityForResult().

Ho seguito questo esempio che mi sembra molto ben fatto: How to manage start activity for result on Android? - Stack Overflow

ma provando a debuggare ho notato che al ritorno della seconda activity non entra nel metodo onActivityResult.

Quello che ho fatto è:

File 1:

Codice: [Seleziona]
 
Intent intent = new Intent(getActivity(), Activity2.class
Log.v(TAG, "startcamera");
getActivity().startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);


Activity 2:

Codice: [Seleziona]
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();


File 1:

Codice: [Seleziona]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                Log.v(TAG, "onactivity");
            if (requestCode == 1) {
                if(resultCode == android.app.Activity.RESULT_OK){
                    String result=data.getStringExtra("result");
                }
                if (resultCode == android.app.Activity.RESULT_CANCELED) {
                    //Write your code if there's no result
                }
            }
        }//onActivityResult


Grazie

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 665
  • Respect: +143
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:startActivityForResult
« Risposta #1 il: 29 Dicembre 2014, 01:09:09 CET »
0
Prova a cambiare

Codice (Java): [Seleziona]
getActivity().startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
in

Codice (Java): [Seleziona]
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:startActivityForResult
« Risposta #2 il: 29 Dicembre 2014, 11:25:38 CET »
0
Se tolgo il getActivity() mi dice che il metodo startActivityForResult non è definito.

getActivity() è un metodo definito in un altra classe ( e che non posso toccare)

Codice: [Seleziona]
public Activity getActivity() {
return context;
}

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 665
  • Respect: +143
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:startActivityForResult
« Risposta #3 il: 29 Dicembre 2014, 14:06:28 CET »
0
Allora posso solo supporre che "File 1" non sia una classe che eredita da Activity o Fragment. Se posti una porzione maggiore di codice (ad esempio la definizione della classe in "File 1") forse è possibile valutare dettagli maggiori.

Comunque la onActivityResult è invocata nell'Activity restituita da getActivity().

In pratica "File 1" sta dicendo all'activity restituita da getActivity() di avviare un intent e di attendere un risultato. Il risultato, quindi, sarà inviato all'activity e non a "File 1"
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:startActivityForResult
« Risposta #4 il: 29 Dicembre 2014, 16:48:41 CET »
0
Grazie per l'aiuto..Ecco ulteriori dettagli:

Codice: [Seleziona]
public class File1 extends AbstractViewFactory implements InteractionManagerListener {

public void startCamera(QRCode listener) {

Intent intent = new Intent(getActivity(), com.gabriele.scanner.SimpleScannerActivity.class);
                       
getActivity().startActivityForResult(intent, QRCODE_ACTIVITY_REQUEST_CODE);
                           
                       
                           
                           
}






}




Activity 2:

Codice: [Seleziona]
public class Activity2 extends ActionBarActivity {

private ZBarScannerView mScannerView;

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mScannerView = new ZBarScannerView(this);
        setContentView(mScannerView);   
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this);
        mScannerView.startCamera();
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();
    }

    @Override
    public void handleResult(Result rawResult) {
           
            String result = rawResult.getContents();
           
            //PROVA
            Intent returnIntent = new Intent();
            returnIntent.putExtra("result",result);
            setResult(RESULT_OK,returnIntent);
            Log.v("SimpleScannerActivity", "simple");
            Log.v("SimpleScannerActivity", result);
            finish();     
             
       
 
     
     
         
    }

}




}



Questi sono i file che non posso toccare:



AbstractViewFactory:

Codice: [Seleziona]
public abstract class AbstractViewFactory implements ViewFactory {
        protected InteractionManager interactionManager;
       
        protected AbstractViewFactory(InteractionManager interactionManager) {
                this.interactionManager = interactionManager;
        }
       
        protected View createInternalErrorView() {
                return interactionManager.createInternalErrorView();
        }
       
        protected View createView(VisualElement visualElement) {
                return interactionManager.createView(visualElement);
        }
       
        protected String getString(String tag) {
                return interactionManager.getString(tag);
        }
       
        protected Context getContext() {
                return interactionManager.getContext();
        }

        protected Activity getActivity() {
                return interactionManager.getActivity();
        }

/*        protected void registerTitleView(VisualElement visualElement, TextView titleView) {
                interactionManager.registerTitleView(visualElement, titleView);
        }
*/
        protected void validate() {
                interactionManager.validate();
        }
       
        protected void handleAction(Action action) {
                interactionManager.handleAction(action);
        }
       
        protected void notifyEvent(int eventID, Object[] arguments) {
                interactionManager.notifyEvent(eventID, arguments);
        }
}


Alcune parti di InteractionManager:

Codice: [Seleziona]
public class InteractionManager {

public Context getContext() {
                return context;
        }

        public Activity getActivity() {
                return context;
        }

        ViewGroup getParent() {
                return parent;
        }


}




Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 665
  • Respect: +143
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:startActivityForResult
« Risposta #5 il: 29 Dicembre 2014, 18:42:41 CET »
0
Se non puoi modificare AbstractViewFactory e soprattutto InteractionManager non credo sia possibile intercettare l'evento onActivityResult.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.