2012-05-28 22 views
9

Aquí es mi first activity código de donde yo llamo el second Activity:¿Cuál es la intención de los parámetros onActivityResult

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){  
    startActivityForResult(new Intent("chap.two.Chapter2Activity2"),request_Code);   
    }  
    return false; 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == request_Code) { 
    if (resultCode == RESULT_OK) 
     Toast.makeText(this,data.getData().toString(),Toast.LENGTH_SHORT).show();    
    } 
} 

Y aquí es un código de chap.two.Chapter2Activity2:

Button n = (Button) findViewById(R.id.btn_OK); 
n.setOnClickListener(new View.OnClickListener() {    
    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 

    Intent data = new Intent(); 
    //---get the EditText view--- 
    EditText txt_username =(EditText) findViewById(R.id.txt_username); 
    //---set the data to pass back--- 
    data.setData(Uri.parse(txt_username.getText().toString())); 
    setResult(RESULT_OK, data); 
    //---closes the activity--- 
    finish(); 

    } 
}); 

aquí veo que setResult(RESULT_OK, data) tiene dos argumentos pero
onActivityResult(int requestCode, int resultCode, Intent data) tiene tres y quiero saber cómo onActivityResult obtiene valor para el tercer parámetro? ¿Cómo funciona? ¿Puede alguien decirme? ¿Por qué no es este error?

+0

simplemente si este ansswer http://stackoverflow.com/a/25196220/1587156 –

Respuesta

13

Cuando llama a Activity.startActivityForResult(), configura el requestCode. Más tarde, este código de solicitud se necesita al onActivityResult() para determinar qué actividad le está enviando datos. No es necesario que suministremos requestCode nuevamente en setResult() porque el requestCode es transportado.

El data es intent data devuelto desde el intento de lanzamiento. Usualmente usamos esta información cuando establecemos extras en el intento llamado.

Considere este ejemplo:

LLAMADA SEGUNDO ACTIVIDAD

Intent i = new Intent(MainActivity.this, CheckActivity.class); 
startActivityForResult(i, REQUEST_CODE_CHECK); 

EN SEGUNDA ACTIVIDAD, conjunto de resultados INTENCIÓN

getIntent().putExtra("TADA", "bla bla bla"); 
setResult(RESULT_OK, getIntent()); 
finish(); 

Volver a la primera ACTIVIDAD, onActivityResult()

if(requestCode == REQUEST_CODE_CHECK && resultCode == RESULT_OK){ 
    text1.setText(data.getExtras().getString("TADA")); 
} 

Ahi lo tienes. Ahora debería comprender qué es Intent data y cómo establecer y recuperar el valor.

+0

pero no puedo Entiendo esta parte. Si envío REQUEST_CODE desde mi actividad principal y recupero este REQUEST_CODE en ActivityResult(), también en mi actividad de mainc. ¿Cuál es la lógica de la comparación?(requestCode == REQUEST_CODE_CHEC) –

+0

la idea básica es que onActivityResult() captará todos los intentos que obtenga del intento de devolución. Ahora, para determinar qué intención está volviendo, usted usa 'requestCode' al compararlo con el REQUEST_CODE que ya tiene. En algún momento, una actividad espera un intento de regresar, en otro momento, más de 3. – ariefbayu

1

El tercer parámetro es Intento, que envió desde la subactividad (Segunda actividad, que va a finalizar).

Si desea realizar algunos cálculos o buscar algún nombre de usuario/contraseña en la subactividad y desea enviar el resultado a la actividad principal, coloca los datos en la intención y regresará a la actividad principal antes de finalizar().

Después de eso, comprobará en ActivityResult (int, int, Intent) en la actividad principal para el resultado con el parámetro Intent.

Ejemplo :: MainActivity:

public void onClick(View view) { 
    Intent i = new Intent(this, subActivity.class); 
    startActivityForResult(i, REQUEST_CODE); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
    if (data.hasExtra("username") && data.hasExtra("password")) { 
     String username = data.getExtras().getString("username"); 
     String password = data.getExtras().getString("password"); 

    } 
    } 

subactividad ::

@Override 
public void finish() { 
    // Create one data intent 
    Intent data = new Intent(); 
    data.putExtra("username", "Bla bla bla.."); 
    data.putExtra("password", "*****"); 
    setResult(RESULT_OK, data); 
    super.finish(); 
} 
Cuestiones relacionadas