Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 25/11/14, 23:33:20
Array

[xs_avatar]
Guixe94 Guixe94 no está en línea
Desarrollador
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Tu operador: Orange
Se puede mostrar fragment mediante un string?

Hola,

Quiero mostrar fragments aleatoriamente, y bueno eso ya lo tengo funcionando el problema es que utilizo un numero aleatorio y dependiendo de este numero pues utilizo un Case 0, case 1, etc para abrir cada fragment, estos fragments son diferentes niveles y el problema viene aqui, quiero hacer mas de 100 niveles y claro eso seria un codigo super largo..
Todos los niveles se llaman NivelX (donde X va un numero, por ejemplo Nivel5), hay alguna manera de que me genere el numero aleatorio y despues por ejemplo si el numero es 6 me muestre el fragment 6? Mi codigo actual es el siguiente:

[PHP]public class Xtreme extends Activity {

String SiguienteNivel;
static int randomFragmentNum;
static int NivelesTotales=30;
static Random random = new Random();
FragmentManager fragmentManager = getFragmentManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xtreme);



randomFragmentNum = random.nextInt(7);
Fragment();


}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.xtreme, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

public void Fragment() {

switch (randomFragmentNum) {
case 0: {

fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel1()).commit();
break;
}
case 1: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel2()).commit();
break;
}
case 2: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel3()).commit();
break;
}
case 3: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel4()).commit();
break;
}
case 4: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel5()).commit();
break;
}
case 5: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel6()).commit();
break;
}
case 6: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel7()).commit();
break;
}
case 7: {
fragmentManager.beginTransaction().replace(R.id.co ntainer, new Nivel8()).commit();
break;
}
}





}[/PHP]
Responder Con Cita


  #2  
Viejo 25/11/14, 23:48:27
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Si no necesitas compatibilidad con Gingerbread y anteriores puedes usar Fragment.instantiate:

Fragment fragment = Fragment.instantiate(context, "nombrepaquete.nombreclasefragment");

Si quieres que sea compatible con versiones anteriores tendrás que usar reflexión:

Fragment fragment = (Fragment)Class.forName("nombrepaquete.nombreclase fragment").getConstructor().newInstance();

IMPORTANTE: En ambos casos tendrás que incluir en la configuración de ProGuard que haga un "keep" de las clases que heredan de Fragment. Si no tu aplicación dejará de funcionar tras pasar por ProGuard.
Responder Con Cita
  #3  
Viejo 26/11/14, 00:18:33
Array

[xs_avatar]
Guixe94 Guixe94 no está en línea
Desarrollador
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Tu operador: Orange
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Si no necesitas compatibilidad con Gingerbread y anteriores puedes usar Fragment.instantiate:

Fragment fragment = Fragment.instantiate(context, "nombrepaquete.nombreclasefragment");

Si quieres que sea compatible con versiones anteriores tendrás que usar reflexión:

Fragment fragment = (Fragment)Class.forName("nombrepaquete.nombreclase fragment").getConstructor().newInstance();

IMPORTANTE: En ambos casos tendrás que incluir en la configuración de ProGuard que haga un "keep" de las clases que heredan de Fragment. Si no tu aplicación dejará de funcionar tras pasar por ProGuard.
Hola,

En stackoverflow me dieron esta respuesta:

[PHP]try{
Fragment f = (Fragment)(Class.forName("com.example.Fragment"+i) .newInstance());
fragmentManager.beginTransaction().replace(R.id.co ntainer,f).commit();
}catch(ClassNotFoundException e){
Log.e("loading level","level class not found",e);
}[/PHP]

Cambie com.example.fragment por es.bawi.onesecond.Nivel y en la variable "i" es el numero que me genera aleatoriamente. Tengo puesto ese codigo en el oncreate de la actividad, pero resulta que no me muestra nada, sabes en que estoy fallandO?

Merci! ;)
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 09:32:51 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /