2017-07-12 14 views
0

私はmainActivityにユーザーが選択できる約5つのオプションがあるアプリを持っています。そのうちの1つをクリックすると新しいアクティビティが開きますが、本質的に5つすべてが同じ見出しで異なるアクティビティを開きます。新しく開かれたアクティビティでは、複数の評価バーを使用して、指定された属性にポイントを委任します。 SharedPreferenceを使用すると、アクティビティ全体を保存することができます。バックアウトするときに、同じオプションをクリックしても、すべてが消えませんか?または、SharedPreferenceを使用して個別の評価バーの値を保存する必要がありますか?SharedPreferenceを使用してAndroidでアクティビティを保存しますか?

ボタンクリックから開くアクティビティのコードです。何かがひどく間違っているので、今クラッシュしています。助言がありますか?関数内

public class MageSkillScreen extends AppCompatActivity 

{ 

    public float skillPoints = 10; 
    public float strengthRating; 
    public float intellectRating; 
    public float wisdomRating; 
    public float dexterityRating; 
    public float totalSkill; 


    public float mageStrength; 
    public float mageDexterity; 
    public float mageIntellect; 
    public float mageWisdom; 

    public RatingBar strengthBar; 
    public RatingBar intellectBar; 
    public RatingBar wisdomBar; 
    public RatingBar dexterityBar; 
    Button submit; 

    //preferences 
    SharedPreferences magePref; 
    boolean rememberRatings = true; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mage_skill_screen); 

     strengthBar = (RatingBar) findViewById(R.id.mageStregth); 
     intellectBar = (RatingBar) findViewById(R.id.mageInt); 
     wisdomBar = (RatingBar) findViewById(R.id.mageWisdom); 
     dexterityBar = (RatingBar) findViewById(R.id.mageDext); 
     submit = (Button) findViewById(R.id.submit); 
    } 

    @Override 
    public void onPause() 
    { 
     SharedPreferences.Editor edit = magePref.edit(); 
     edit.putFloat("strengthPts", strengthBar.getRating()); 
     edit.putFloat("dexterityPts", dexterityBar.getRating()); 
     edit.putFloat("intellectPts", intellectBar.getRating()); 
     edit.putFloat("wisdomPts", wisdomBar.getRating()); 
     //edit.putString("pointsLeft", ptsRemaing.getText().toString()); 
     edit.commit(); 

     super.onPause(); 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 

     rememberRatings = magePref.getBoolean("mageRatings", true); 

     mageStrength = magePref.getFloat("strengthPts", 0.0f); 
     mageDexterity = magePref.getFloat("dexterityPts", 0.0f); 
     mageIntellect = magePref.getFloat("intellectPts", 0.0f); 
     mageWisdom = magePref.getFloat("wisdmPts", 0.0f); 
    } 
} 
+4

アクティビティ全体を保存するように属性/プロパティを保存する必要があります。 –

+0

コードを投稿してください。 – Ritesh

答えて

0

更新ビュー・アクティビティがわかりまし

@Override 
protected void onResume() { 
    super.onResume(); 
    //load SharedPreferences again and update view 

} 
0

をonResume、のを段階的に行ってみましょう。

私はmainActivityにユーザーが約5 オプションを持っているアプリを持っています。オーケー

は、いいですね、あなたがユーザーのためのMainActivityに5つのボタンがあります。

これらのうちの1つをクリックすると新しいアクティビティが開きますが、本質的に5つのアクティビティは異なる見出しで同じアクティビティを開きます( )。

ここでより具体的に言えば、1つのボタンをクリックするだけで、1つのアクティビティがすべて起動するはずはありません。これはユーザーが表示または操作するためのアクティビティが1つのみ存在します。他は、バックスタックに入ります。 同じアクティビティのライフサイクルについてお読みください。 SharedPreferenceを使用して

https://developer.android.com/guide/components/activities/activity-lifecycle.html

アウト時に、私は戻って 、私は同じオプションのすべてが消えていないをクリックして、その全体のアクティビティを保存することができますか?

いいえ、あなたはSharedpreference内の全アクティビティを保存することはできません。 SharedPrefは、hashMapやプリミティブ値のようなキーの値のペアを格納するために使用され、アクティビティを格納することができます。

https://developer.android.com/reference/android/content/SharedPreferences.html

さて、戻って同じのためのソリューションに来て。

それは完全にあなたは、各ボタンのクリックで様々な活動を開始している場合は、実装し、他の活動全体でいくつかのデータを永続化したい、sharedpref でプリミティブ値を格納し、他の中でそれにアクセスしようとしているユースケースに依存

アプリの再起動時に同じデータを維持したい場合は、これも当てはまります。

もしそうでなければ、シングルトンオブジェクトを作成して変更し、他のアクティビティを介してそれにアクセスし、メモリリークを避けるためにnullにしてください。

私はあなたの疑いをクリアすることを願っています。

乾杯!

+0

私は、それぞれのボタンが新しいアクティビティを開くことを意味しました。彼らは同じ活動を開くことはありません。ボタン1はnewActivity1を開き、ボタン2はnewActivity2などを開きますが、それぞれのnewActivityは基本的に同じレイアウトを持ち、同じことをします。 – mrAnderson

+0

大丈夫です。あなたは永続性のためにsharedprefを使うことができます。 – Ritesh

関連する問題