android - studio - start intent for result example
onActivityResult no se llama para startActivityForResult (4)
Creo que es porque launchMode
, launchMode
en AndroidManifest
Pruébalo con singleTop
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
[EDITADO]
Haga esto cambiar y dígame qué sucede cuando toca en la vista de configuración.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, ACTIVITY_CREATE);
break;
}
return super.onOptionsItemSelected(item);
}
Tengo una actividad principal con un menú de opciones con un elemento de ''configuración''.
Cuando inicio SettingsActivity
, todo funciona bien hasta que hago clic en el botón Guardar e intento finalizar la SettingsActivity
. Esta actividad finaliza pero parece que también cierra la actividad principal. Estoy trabajando en esto en Eclipse. Eclipse dice que algo todavía se está ejecutando porque me permite hacer clic en el botón de detención. Tengo un hilo del temporizador ejecutándose en MainActivity
, pero probé esto sin ese hilo y todavía no vuelve a onActivityResult()
.
Estoy comenzando a configurar Settings de esta manera:
public static final int ACTIVITY_CREATE = 1;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
try {
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, ACTIVITY_CREATE);
}
catch (Exception e) {
Log.e(TAG, e.getMessage());
finish();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Estoy esperando que finish () en SettingsActivity me lleve a esta función, pero no es así. Tengo un punto de interrupción establecido aquí y nunca llega aquí:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case (ACTIVITY_CREATE): {
if (resultCode == RESULT_OK) {
}
break;
}
}
}
Aquí está la simple configuración de la actividad:
public class SettingsActivity extends Activity implements View.OnClickListener {
private Button save;
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.settings);
save = (Button) findViewById(R.id.save);
save.setOnClickListener(this);
return;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.save:
Intent intent = new Intent();
intent.putExtra("ip", ipText.getText().toString());
setResult(RESULT_OK, intent);
finish();
break;
default:
break;
}
return;
}
} // public class SettingsActivity extends Activity {
LaunchMode para la actividad principal se establece en "estándar".
Mi pregunta es ¿por qué no vuelvo a onActivityResult () en la actividad de llamadas?
Gracias, Bob
Aquí está el archivo de manifiesto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.MyStuff"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity
android:name=".CTNet"
android:label="@string/app_name"
android:screenOrientation = "fullSensor"
android:configChanges = "orientation|screenSize|keyboardHidden"
android:launchMode="singleTask"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" /> <!-- after targetSdkVersion -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
</manifest>
Intentando agregar logcat detallado aquí:
06-30 12:18:58.292: I/System.out(16197): Sending WAIT chunk
06-30 12:18:58.292: W/ActivityThread(16197): Application com.MyStuff is waiting for the debugger on port 8100...
06-30 12:18:58.300: I/dalvikvm(16197): Debugger is active
06-30 12:18:58.495: I/System.out(16197): Debugger has connected
06-30 12:18:58.495: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:58.698: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:58.901: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.097: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.300: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.503: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.706: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.901: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.104: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.307: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.511: I/System.out(16197): debugger has settled (1476)
06-30 12:19:00.722: D/SOV(16197): MainActivity::onCreate
06-30 12:19:01.003: D/CTNet(16197): creating view
06-30 12:19:01.003: D/CTNet(16197): view created
06-30 12:19:01.065: I/System.out(16197): CTNet: starting
06-30 12:19:01.128: I/System.out(16197): BMA254 Acceleration Sensor
06-30 12:19:01.128: I/System.out(16197): vendor = Bosch Sensortec
06-30 12:19:01.128: I/System.out(16197): version = 42602
06-30 12:19:01.128: I/System.out(16197): maximum range = 19.613300
06-30 12:19:01.136: I/System.out(16197): min delay = 10000
06-30 12:19:01.136: I/System.out(16197): power = 0.130000
06-30 12:19:01.136: I/System.out(16197): resolution = 0.038307
06-30 12:19:01.136: I/System.out(16197): type = 1
06-30 12:19:01.136: I/System.out(16197): MS-3E (YAS530) Magnetic Sensor
06-30 12:19:01.136: I/System.out(16197): vendor = Yamaha Corporation
06-30 12:19:01.143: I/System.out(16197): version = 42602
06-30 12:19:01.143: I/System.out(16197): maximum range = 800.000000
06-30 12:19:01.143: I/System.out(16197): min delay = 10000
06-30 12:19:01.143: I/System.out(16197): power = 4.000000
06-30 12:19:01.143: I/System.out(16197): resolution = 0.300000
06-30 12:19:01.143: I/System.out(16197): type = 2
06-30 12:19:01.151: I/System.out(16197): MS-x Orientation Sensor
06-30 12:19:01.151: I/System.out(16197): vendor = Yamaha Corporation
06-30 12:19:01.151: I/System.out(16197): version = 42602
06-30 12:19:01.151: I/System.out(16197): maximum range = 360.000000
06-30 12:19:01.151: I/System.out(16197): min delay = 10000
06-30 12:19:01.151: I/System.out(16197): power = 0.000000
06-30 12:19:01.151: I/System.out(16197): resolution = 1.000000
06-30 12:19:01.151: I/System.out(16197): type = 3
06-30 12:19:01.151: I/System.out(16197): AL3201 Light Sensor
06-30 12:19:01.151: I/System.out(16197): vendor = LITEON
06-30 12:19:01.151: I/System.out(16197): version = 42602
06-30 12:19:01.159: I/System.out(16197): maximum range = 0.000000
06-30 12:19:01.159: I/System.out(16197): min delay = 0
06-30 12:19:01.159: I/System.out(16197): power = 0.000000
06-30 12:19:01.159: I/System.out(16197): resolution = 0.000000
06-30 12:19:01.159: I/System.out(16197): type = 5
06-30 12:19:01.159: I/System.out(16197): Auto Rotation Sensor
06-30 12:19:01.159: I/System.out(16197): vendor = Samsung Electronics
06-30 12:19:01.159: I/System.out(16197): version = 1
06-30 12:19:01.159: I/System.out(16197): maximum range = 255.000000
06-30 12:19:01.159: I/System.out(16197): min delay = 0
06-30 12:19:01.167: I/System.out(16197): power = 0.000000
06-30 12:19:01.167: I/System.out(16197): resolution = 0.000000
06-30 12:19:01.167: I/System.out(16197): type = 15
06-30 12:19:01.167: E/SensorManager(16197): thread start
06-30 12:19:01.167: D/SensorManager(16197): registerListener :: handle = 1 name= BMA254 Acceleration Sensor delay= 200000
06-30 12:19:01.253: D/CTNet(16197): onStart
06-30 12:19:01.261: D/CTNet(16197): onResume
06-30 12:19:01.487: D/SV(16197): surfaceCreated
06-30 12:19:01.487: D/SV(16197): surfaceChanged
06-30 12:19:08.190: W/Choreographer(16197): Already have a pending vsync event. There should only be one at a time.
06-30 12:19:08.222: D/CTNet(16197): onPause
06-30 12:19:08.245: D/SensorManager(16197): unregisterListener::
06-30 12:19:08.245: D/Sensors(16197): Remain listener = Sending .. normal delay 200ms
06-30 12:19:08.245: I/Sensors(16197): sendDelay --- 200000000
06-30 12:19:08.245: D/SensorManager(16197): JNI - sendDelay
06-30 12:19:08.245: I/SensorManager(16197): Set normal delay = true
06-30 12:19:08.323: E/ViewRootImpl(16197): sendUserActionEvent() mView == null
06-30 12:19:08.487: D/settings(16197): 192.168.1.200
06-30 12:19:08.487: D/settings(16197): 9072
06-30 12:19:08.979: D/SV(16197): surfaceDestroyed
06-30 12:19:09.089: D/CTNet(16197): onStop
06-30 12:19:10.682: D/settings(16197): save clicked
06-30 12:19:10.729: W/Choreographer(16197): Already have a pending vsync event. There should only be one at a time.
06-30 12:19:10.948: W/IInputConnectionWrapper(16197): showStatusIcon on inactive InputConnection
06-30 12:19:11.104: D/SOV(16197): MainActivity::onDestroy
Encontré el problema. Terminé () al final de la función onStop () de MainActivity.
Intenta establecer tu actividad principal como
android:launchMode="singleTask"
en tu AndroidManifest.
Intente cambiar el método de protected
a public