Devolver valor desde una actividad secundaria Android

Actividad Principal

Creamos el siguiente método:
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if ((requestCode == request_code) && (resultCode == RESULT_OK)){
            data.getDataString() //cogemos los datos que devuelve la segunda actividad
        }
    }
Este método sirve para ejecutar las acciones que se realizará la clase una vez la segunda actividad haya devuelto los datos.
Iniciamos la segunda actividad de tal forma que reciba los datos una vez esta acabe:
int request_code = 1; //declarado como global
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, request_code);

Actividad Secundaria

Devolvemos desde el segundo activity los datos que queramos.
Intent data = new Intent();
data.setData(Uri.parse(cad));
setResult(RESULT_OK, data);
finish();
cad --> es la cadena que devolvemos al activity principal.

Ejemplo, creamos una ListView y el elemento elegido es el que se devuelve:
lvString = (ListView)findViewById(R.id.lv_Strings);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, cargarListView());
lvString.setAdapter(adapter);
        
lvString.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  long arg3) {
   // TODO Auto-generated method stub
   String cad = (String)lvString.getAdapter().getItem(arg2);
   Intent data = new Intent();
     data.setData(Uri.parse(cad));
     setResult(RESULT_OK, data);
     finish();
  }     
});