2015-08-13 11 views
5

mam problem, aby ustawić widoczność przycisku przez inną działalnośćzestaw przycisk widoczny w innym acticty z Preferencje

wyjaśnienie Kod:

Najpierw 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 przycisk służy do intencji leveltwo.class ale nadal jest ustawiona na GONE, f2lock jest ImageView dla levellocked

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

następujący kod zadzwonić levelone.java z wynikiem

więc w levelone.java i umieścić kod jak ten

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

funkcja kod jest wysłanie wynik (2) do menu.class po zakończeniu level.class();

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

powyższy kod ma otrzymać wynik (2) z levelone.class i zrobić case 2 funkcja

pytanie brzmi, jak używać i ustawić SharedPreferences w przypadku 2? tak F2 i f2lock widzialność będzie zapisany

bo mam spróbować kod SharedPreferences ale nic to się stało, przycisk F2 nadal ma i f2lock ImageView nadal widoczny

mi o to tak:

jak gra kiedy użytkownik zrobili tak poziom 1 poziom 2 będzie odblokowany

ale tu robię przycisk jest widoczny, gdy poziom 1 odbywa

+0

Hej tam. Mogę pomóc ci rozwiązać ten problem, ale jestem nieco zdezorientowany, o co dokładnie pytasz. To pewnie ja jestem głupią gęś, ale wciąż - umysł wyjaśniający w komentarzu, lub robiąc pytanie, tak, że mogę udzielić ci odpowiedniej odpowiedzi, proszę. – Sipty

+0

O wiele więcej abstrakcji i mniej odniesienia do kodu, powinienem dodać. – Sipty

+0

Kod, który mam na myśli, jest jak normalna gra, kiedy poziom 1 ukończył poziom 2 – RichFounders

Odpowiedz

1

Mam nadzieję, że już zrozumiał swoje pytanie poprawnie. Proszę, popraw mnie, jeśli nie mam!

Ja widzę rzeczy jest to, że istnieje kilka różnych rozwiązanie do przypadku użycia:

Pierwszy z nich, byłoby właściwe wdrożenie SharedPreferences, bezpośrednio opierając się na szczycie istniejącego kodu. W moich oczach to nie jest najlepsze podejście, ponieważ niewłaściwie wykorzystuje punkt SharedPreferences.

Innym sposobem wykonania tej czynności byłoby wprowadzenie wywołań zwrotnych w różnych działaniach, ale byłoby to po prostu nudne, ponieważ dodaje się kolejne poziomy.

Moim rozwiązaniem byłoby posiadanie innej klasy z wartościami statycznymi, która zapisywałaby postęp gracza.Może to również zostać przekształcone w plik, który zapisujesz na dysku, jeśli chcesz, aby postęp pozostawał między sesjami.

Wystarczy sprawdzić postęp gracza, ilekroć zajdzie taka potrzeba, za pomocą prostej funkcji interfejsu, takiej jak getPlayerProgress(), która zwróci na przykład liczbę całkowitą, wyjaśniającą maksymalny osiągnięty poziom. Zakłada to również, że obsługujesz interfejs za pomocą oddzielnej funkcji, która byłaby wywoływana na początku każdego poziomu/początku gry. Nazwa tej funkcji będzie na przykład updateLevel(). Czy to ma dla ciebie sens?

Oto realizacja próbki z dwóch klas I wymienionych:

/** 
* 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. 
     } 
    } 
} 

Ponownie, jeśli mam źle, proszę mnie poprawić. Jeśli chcesz mieć przykładowy kod, po prostu zapytaj.

Mam nadzieję, że masz piękny dzień.

+0

hmm, więc to getPlayerProgress() przypomina załadowanie ostatnich danych zapisanych w grze? – RichFounders

+0

W tym przypadku uzyska dostęp do informacji, które próbujesz zapisać za pomocą wspólnych preferencji: postęp graczy. Zapomniałem wspomnieć, że zakładam użycie funkcji obsługi interfejsu. Pozwól, że to zmienię. – Sipty

+0

Edytowałem to, proszę spojrzeć. – Sipty

1

zapis poniżej kodu:

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

i sprawdzić w na skutek aktywny:

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

ok bro Spróbuję tego – RichFounders

+0

, ale w jaki sposób umieściłem tam preferencje? więc widoczność przycisku jest zapisana? – RichFounders

Powiązane problemy