Set button Visible in another function with the Preferences setting

I have a problem with setting the Visibility button using another action

Code designation:

First 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" /> 
Button

f2 used for the intent leveltwo.class , but it is still set to GONE, f2lock is an ImageView for levellocked

Secondly, 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); } 

the following code to call levelone.java with the result

so in levelone.java i will put code like this

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

the code function sends the result (2) to menu.class when level.class ends ();

 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); } 

the above code should get the result (2) from levelone.class and execute case 2 function

The question is, how to use and set SharedPreferences in case 2? therefore, the visibility of f2 and f2lock will be preserved

because I tried the SharedPreferences code but nothing happens, the f2 button is still GONE and the f2lock imageview is still VISIBLE

i means the following:

Like a game, when the user completed level 1, so that level 2 will be unlocked

but here I do the VISIDLE button when level 1 is running

+5
source share
2 answers

I hope I understood your question correctly. Please correct me if I do not!

The way I see things is that in your use case there are several different options:

First, it will be the correct implementation of SharedPreferences directly created on top of existing code. In my opinion, this is not the best approach, since it does not use the SharedPreferences point correctly.

Another way to do this is to implement callbacks in different actions, but it will be just tedious as you add more levels.

My solution would be to have another class with static values ​​that would preserve the progress of the player. It can also be converted to a file that you write to disk if you want progress to remain between sessions.

You just need to check the player’s progress when you need it, using a simple interface function, for example getPlayerProgress() , which will return, for example, an integer, explaining what the maximum level reached. It also assumes that you are processing an interface with a separate function that will be called at the beginning of each run / game level. For example, the name for this function will be updateLevel() . Does that make sense to you?

Here is an example implementation of the two classes I mentioned:

 /** * 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 progress. * @param levelNumber: latest level number. */ public static void updateProgress(int levelNumber) { progress = levelNumber; } /** * Get the player 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 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. } } } 

Again, if I misunderstood, please correct me. If you want a sample code, by all means, just ask.

I hope you have a wonderful day.

+1
source

Enter the code below:

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

and register in the results of Actions:

 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); } } } } 
+1
source

All Articles