2017-06-28 13 views
1

私は4つのチェックボックスを持っており、チェックされた数はTextViewに表示しようとします。
I変数numberOfTrueを作成しました。これをスイッチで増やしました。 もちろん、私のアプリはまだ機能していないので、textViewはまだ "0"を表示します
クリックしたボックスの数を変更した後に変数が更新されません。
私は分かりません。チェックされたチェックボックスの数

public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { 

    private int numberOfTrue = 0; 
    private TextView tv1; 
    private CheckBox cb1; 


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

     CheckBox cb2,cb3,cb4; 
     Button b2; 


     b2 = (Button)findViewById(R.id.b2); 

     tv1 = (TextView)findViewById(R.id.tv1); 
     cb1 = (CheckBox)findViewById(R.id.cb1); 
     cb1.setChecked(getFromSP("cb1")); 
     cb1.setOnCheckedChangeListener(this); 
     cb2 = (CheckBox)findViewById(R.id.cb2); 
     cb2.setChecked(getFromSP("cb2")); 
     cb2.setOnCheckedChangeListener(this); 
     cb3 = (CheckBox)findViewById(R.id.cb3); 
     cb3.setChecked(getFromSP("cb3")); 
     cb3.setOnCheckedChangeListener(this); 
     cb4 = (CheckBox)findViewById(R.id.cb4); 
     cb4.setChecked(getFromSP("cb4")); 
     cb4.setOnCheckedChangeListener(this); 


     tv1.setText(""+numberOfTrue); 


     b2.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 

       finish(); 

      } 
     }); 



    } 


    private boolean getFromSP(String key){ 
     SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 
     return preferences.getBoolean(key, false); 
    } 
    private void saveInSp(String key,boolean value) { 
     SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putBoolean(key, value); 
     editor.commit(); 
    } 



    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     switch(buttonView.getId()){ 
      case R.id.cb1: 
       saveInSp("cb1",isChecked); 
       if (isChecked == true){ 
        numberOfTrue++; 
      } 
       break; 
      case R.id.cb2: 
       saveInSp("cb2",isChecked); 
       if (isChecked == true){ 
        numberOfTrue++; 
       } 
       break; 

      case R.id.cb3: 
       saveInSp("cb3",isChecked); 
       if (isChecked == true){ 
        numberOfTrue++; 
       } 
       break; 

      case R.id.cb4: 
       saveInSp("cb4",isChecked); 
       if (isChecked == true){ 
        numberOfTrue++; 
       } 
       break; 

     } 
    } 
} 
+0

何が問題なのですか? –

+0

これはhttps://stackoverflow.com/questions/44707204/introduction-of-sharedpreference-in-tap-counter-app-causes-app-crash/44707237#44707237を読んで、同じ問題がある –

+0

よかったですが、私のアプリはまだテキストビューで "0"を表示します。いいえ、アップデートを受け取りません。 – androidmanifest3

答えて

2

1)使用文字列を言うanswer hereを、フォローしてTextViewに新しい値を反映するためにonCheckedChanged(関数の最後にtv1.setText(""+numberOfTrue);を追加)

2. tv1.setText(""+numberOfTrue);のようなあなたのtextviewcheckChangeイベントの後

@Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // switch code 
     tv1.setText(""+numberOfTrue); 
    } 
+0

より良いですが、1回チェックボックスで100回クリックすると100番目のテキストが表示されます:/ – androidmanifest3

+0

'else '文をすべてのifと一緒に使い、' else {numberOfTrue--; } ' –

関連する問題