¿Cómo puedo comenzar una nueva actividad de Android usando una cadena?

Tengo un problema con una aplicación de Android en la que estoy trabajando.

Mi aplicación tiene varias secciones y la siguiente pantalla que carga se basa en una cadena. Entonces, la pantalla 1 de la sección 1 sería, S1S1.

Mi pregunta es, ¿cómo puedo comenzar una actividad basada en una cadena? Tengo S1S1 guardado en una cadena, llamémoslo nextactivity. En lugar de tener que escribir S1S1.class, necesito que venga de la cadena. He aprendido todo lo que puedo decir y google no me ayudó mucho.

Algunas cosas que he intentado son

Intent myIntent = new Intent(nextactivity); Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity)); Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity)); 

e intenté correr con

 startActivityForResult(myIntent, 0); 

Pero nada parece funcionar. ¿Algunas ideas?

Aquí hay un código por el cual puedes comenzar la actividad usando el nombre de la actividad

 String activityToStart = "com.example.MainActivity"; try { Class< ?> c = Class.forName(activityToStart); Intent intent = new Intent(this, c); startActivity(intent); } catch (ClassNotFoundException ignored) { } 

EDITAR

Aquí el nombre de la clase será el nombre completo de la clase con el nombre del paquete. Por ejemplo, si el nombre de su paquete será xyz y si tiene el nombre de Actividad llamado A , el nombre completo de la Actividad A será xyzA .

Una forma aún mejor (y una que se usa en el sistema para iniciar Browser.apk junto con otras aplicaciones que no se incluyen con AOSP):

 Intent intent = new Intent(); intent.setClassName("com.android.browser","com.android.BrowserActivity"); context.startActivity(intent); 

Alternativamente, si desea verificar que puede iniciar la Activity desde la línea de comando, puede hacer algo como esto desde su caparazón:

 adb shell am start com.android.browser/.BrowserActivity 

No estoy al tanto de la solución, pero tengo una alternativa … la forma similar a ocultar y mostrar div en las páginas web.

si su s1s1 tiene contenido bajo cargado, hágalos en una distribución lineal y mantenga su visibilidad sin cargar el formulario s1. cuando haces clic en s1 para alcanzar s1s1, escondes s1 y configuras los parámetros de visibilidad en “visible”.

Al hacer esto, puede evitar crear una actividad separada y de esta manera también es fácil navegar de regreso.

¡Usa Enums!

 public enum SectionActivity { S1S1(MyS1Activity.class), S1S2(S2Activity.class); private Class< ? extends Activity> activityClass; private SectionActivity(Class< ? extends Activity> clazz) { this.activityClass = clazz; } public Class< ? extends Activity> getActivity { return activityClass; } } 

Luego, en algún lugar de tu código:

 SectionActivity act = SectionActivity.valueOf(string); Intent intent = new Intent(this, act.getActivity()); startActivity(intent);