2017-01-27 30 views
0

你好任何人都可以请帮助我如何保存我的复选框状态,当我离开活动,刷新或关闭应用程序我的cckckbox重置为取消选中。我尝试四处搜索,但无法保存,下面是我的代码如何保存复选框的状态,即使应用程序关闭

package com.example.android.xb; 

import android.app.AlarmManager; 
import android.app.Dialog; 
import android.app.PendingIntent; 
import android.app.TimePickerDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.TimePicker; 

import java.util.Calendar; 

public class RemindersActivity extends AppCompatActivity { 

    Calendar calender = Calendar.getInstance(); 

    private TextView timePicker; 


    private int pHour; 
    private int pMinute; 

    static final int TIME_DIALOG_ID = 0; 

    private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

        pHour = hourOfDay; 
        pMinute = minute; 
        updateDisplay(); 

       } 
      }; 

    private void updateDisplay() { 
     timePicker.setText(new StringBuilder() 
       .append(pad(pHour)).append(":") 
       .append(pad(pMinute))); 
    } 

    private static String pad(int c) { 
     if (c >= 10) 
      return String.valueOf(c); 
     else 
      return "0" + String.valueOf(c); 
    } 

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


     // Display for up button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // Setting up the onlick listener 
     findViewById(R.id.checkbox_alert).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if (((CheckBox) view).isChecked()) { 


        // Time setup for notification to pop up 
        calender.set(Calendar.HOUR_OF_DAY, pHour); 
        calender.set(Calendar.MINUTE, pMinute); 

        // Setting up the notification on checkbox checked 
        Intent intent = new Intent(getApplicationContext(), NotificationReceiver.class); 

        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, 
          intent, PendingIntent.FLAG_UPDATE_CURRENT); 

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), 
          alarmManager.INTERVAL_DAY, pendingIntent); 


       } 
      } 


     }); 

     // Setting up the onclick listener for time textView 
     timePicker = (TextView) findViewById(R.id.time_set); 

     timePicker.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showDialog(TIME_DIALOG_ID); 
      } 
     }); 

     final Calendar calendar = Calendar.getInstance(); 
     pHour = calendar.get(Calendar.HOUR_OF_DAY); 
     pMinute = calendar.get(Calendar.MINUTE); 

     updateDisplay(); 

    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
      case TIME_DIALOG_ID: 
       return new TimePickerDialog(this, mTimeSetListener, pHour, pMinute, false); 

     } 
     return null; 
    } 
} 
+1

这就是SharedPreferences是。他们被写入文件系统。 – Micha

回答

0

使用共享偏好:

要将数据写入共享偏好使用例如:

SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putBoolean("checkbox", checkbox.isChecked())); //first value -preference name, secend value -preference value 
editor.commit(); 

要从共享偏好阅读:

SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE); 
boolean isMyValueChecked = sharedPref.getBoolean("checkbox", false);//first value -preference name, secend value - default value if checbox not found 
+0

你可以请解释更多或告诉我如何将它添加到我的代码我似乎无法使它工作...谢谢 –

+0

这应该工作: 在创建方法后setContentView: '最后SharedPreferences sharedPref = RemindersActivity。 this.getPreferences(Context.MODE_PRIVATE); boolean isMyValueChecked = sharedPref.getBoolean(“checkbox”,false); CheckBox checbox =(CheckBox)findViewById(R.id.checkbox_alert); chessbox.setChecked(isMyValueChecked);' in checkbox_alert.setOnClickListener: 'SharedPreferences.Editor editor = sharedPref.edit(); (“Checkbox”,((CheckBox)view).isChecked()); editor.commit();'在从首选项创建加载值时,点击保存实际值。 – Sabriael

+0

非常感谢你,一个完美的解决方案... –

0

每次更新时都可以将结果保存在SharedPreferences中。即使您的应用程序被杀死,它也会存储在那里。您可以在每次再次开始活动时检查SharedPreferences中的值并相应地设置检查。

建立SharedPreference:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 

更新或编辑sharedPreferences,您可以添加这时候只要你更新检查按钮,或在您的onClick:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putBoolean("checkBox1", true); 
editor.commit(); 

你可以从sharedPreference阅读:

Boolean defaultValue = sharedPref.getBoolean("checkBox1", defaultValue); 

你也可以看看Android documentationtutorial。此

相关问题