Ajuste el botón Visible en otro acticty con la configuración de Preferencias

Tengo un problema para establecer el botón Visibilidad a través de otra actividad

Explicación del código:

En primer lugar, menu.xml

 <Button android:id="@+id/f1" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginRight="10dp" android:background="@drawable/button1" android:visibility="visible" /> <ImageView android:id="@+id/f2lock" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:src="@drawable/levellocked" android:visibility="visible" /> <Button android:id="@+id/f2" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="@drawable/button2" android:visibility="gone" /> 

f2 botón utilizado para la intención leveltwo.class pero todavía se establece en GONE, f2lock es ImageView para levellocked

Segundo, menu.java

 public class menu extends Activity { Button f1, f2; ImageView f2lock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.famouslevel); f1 =(Button)findViewById(R.id.f1); f1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ // TODO Auto-generated method stub Intent level1 = new Intent (); level1.setClassName ("com.example.game", "com.example.game.levelone"); startActivityForResult (level1, 0); } }); } public void onActivityResult (int requestCode, int resultCode, Intent level1){ super.onActivityResult (requestCode, resultCode, level1); f2=(Button)findViewById(R.id.f2); f2lock=(ImageView)findViewById(R.id.f2lock); switch (resultCode) { case 2: f2.setVisibility(View.VISIBLE); f2lock.setVisibility(View.GONE); } f2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ // TODO Auto-generated method stub Intent level2 = new Intent (); level2.setClassName ("com.example.game", "com.example.game.leveltwo"); startActivityForResult (level2, 0); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.splashscreen, 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); } 

Siguiente código para llamar a levelone.java con un resultado

Por lo que en levelone.java poner el código como este

  public void onClick(View v){ setResult (2); finish(); } }); 

La función de código es enviar Resultado (2) a menu.class cuando level.class es finish ();

 public void onActivityResult (int requestCode, int resultCode, Intent level1){ super.onActivityResult (requestCode, resultCode, level1); f2=(Button)findViewById(R.id.f2); f2lock=(ImageView)findViewById(R.id.f2lock); switch (resultCode) { case 2: f2.setVisibility(View.VISIBLE); f2lock.setVisibility(View.GONE); } 

El código anterior es recibir el resultado (2) de la levelone.class y do case 2

La pregunta es cómo usar y establecer SharedPreferences en el caso 2? Por lo que la visibilidad de f2 y f2lock se guardará

Porque tengo intentar el código de SharedPreferences pero nada sucede, el botón de f2 todavía GONE y f2lock imageview todavía VISIBLE

Quiero decir es como esto:

Como un juego, cuando el usuario ha hecho el nivel 1 para que el nivel 2 se desbloquee

Pero en aquí hago el botón es VISIBLE cuando el nivel 1 está hecho

Espero haber entendido su pregunta correctamente. Por favor, corregirme si no lo he hecho.

La forma en que veo las cosas es que hay varias soluciones diferentes para su caso de uso:

El primero, sería una correcta implementación de SharedPreferences , construyendo directamente encima de su código existente. En mis ojos, que no es el mejor enfoque, ya que es mal uso de la cuestión de SharedPreferences.

Otra forma de hacerlo sería implementar devoluciones de llamada en las diferentes actividades, pero eso sería sólo tedioso, ya que agregar más niveles.

Mi solución a esto sería tener una clase diferente con valores estáticos, que almacenaría el progreso del jugador. Esto también puede evolucionar a un archivo, que se escribe en el disco, si desea que el progreso se mantenga entre las sesiones.

Solo tendrías que comprobar el progreso del jugador, siempre que lo necesites, con una función de interfaz simple como getPlayerProgress() , que devolvería, por ejemplo, un número entero, explicando cuál es el nivel máximo alcanzado. Esto también supone que usted maneja la interfaz con una función separada, que se llamaría al principio de cada inicio de nivel / juego ect. Un nombre para esa función sería updateLevel() , por ejemplo. ¿Tiene sentido esto para ti?

A continuación se muestra una implementación de ejemplo de las dos clases que he mencionado:

 /** * A static class, which handles all player progress, throughout the lifespan of the app. * */ static class PlayerProgress { // We set progress to static, so it would be alive, no matter what activity you're in. private static int progress = 1; /** * Update the player's progress. * @param levelNumber: latest level number. */ public static void updateProgress(int levelNumber) { progress = levelNumber; } /** * Get the player's progress. * @return the latest level number. */ public static int getPlayerProgress() { return progress; } } /** * The gui handler would need to be called, every time you need to update the screen to the * appropriate level and it's assets. (Buttons, activities ect.) * * I would implement a MainActivity, which would handle the different screens. * */ class guiHandler { public void updateLevel() { int progress = PlayerProgress.getPlayerProgress(); /* * Add your */ switch(progress) { case 1: /* * Add the code, which would display level one. * This would include all button visibilities and maybe load level resources ect. */ break; case 2: /* * Same as above. */ break; // You can expand this to as many levels you'd like. } } } 

De nuevo, si he entendido mal, por favor corrijame. Si desea código de ejemplo, por todos los medios, sólo pregunte.

Espero que tengas un día precioso.

Escriba abajo el código:

 Intent intent = new Intent(); intent.putExtra("key", 2); setResult(RESULT_OK, intent); finish(); 

Y registrar el resultado de la actividad:

 public void onActivityResult (int requestCode, int resultCode, Intent level1) { super.onActivityResult(requestCode, resultCode, level1); if (requestCode == 0 && resultCode == RESULT_OK) { if(level1.getExtras() != null){ int key = level1.getIntExtra("key",0); if(key == 2){ f2.setVisibility(View.VISIBLE); f2lock.setVisibility(View.GONE); } } } } 
  • Primera vez que se muestra Solución de actividad
  • Cómo burlar una SharedPreferences usando Mockito
  • ¿Puedo cambiar el nombre de archivo de Preferencias?
  • SharedPreferences no se actualiza
  • Un botón con el comentario que ya ha hecho clic no se mostrará la próxima vez que el usuario abra la aplicación
  • Java.lang.String no se puede convertir en com.example.expandablelistview.NewsItem
  • Android SharedPreferences Conjunto de cadenas: algunos elementos se quitan después de reiniciar la aplicación
  • ¿Cuál es la diferencia entre las entradas y los valores de entrada en android listPreferences xml?
  • Guardar en SharedPreferences desde DialogPreference personalizado
  • Diferencia entre las preferencias compartidas y los proveedores de contenido en android
  • Guardar el valor del elemento seleccionado mediante la preferencia compartida
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.