Android 在按下另一个按钮重置它并启用按钮之前,在保存时禁用按钮?

Android disabling button on save until another button is pressed to reset it and reenable button?

我基本上有一个按钮可以将数据保存到共享首选项中。

我想做的是禁用该按钮,直到按下重置按钮,清除共享首选项中的数据,然后重新启用保存按钮。

我一直在尝试使用,但是当我保存后回到屏幕时,它又被启用了:

button.setEnabled(true);

有什么想法吗?

我的代码:

public class Settings extends Activity {
    EditText editText, editText2, editText3;
    RadioGroup radioSexGroup, radioTargetGroup;

    Button button, resetbutton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        editText = (EditText) findViewById(R.id.editText);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText3 = (EditText) findViewById(R.id.editText3);
        button = (Button) findViewById(R.id.button8);
        button.setOnClickListener(new Button_Clicker());
        resetbutton = (Button) findViewById(R.id.resetbutton);
        resetbutton.setOnClickListener(new reset_clicker());
        loadSavedPreferences();

    }
    private void loadSavedPreferences() {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);

        String weight = sharedPreferences.getString("storedweight", "Your Weight");
        editText.setText(weight);
        String age = sharedPreferences.getString("storedage", "Your Age");
        editText2.setText(age);
        String height = sharedPreferences.getString("storedheight", "Your Height");
        editText3.setText(height);
        RadioButton male = (RadioButton)findViewById(R.id.radioMale);
        RadioButton female = (RadioButton)findViewById(R.id.radioFemale);
        if(sharedPreferences.getBoolean("is_male", false))
            male.setChecked(true);
        else
            female.setChecked(true);

        RadioButton strength = (RadioButton)findViewById(R.id.radioStrength);
        RadioButton fitness = (RadioButton)findViewById(R.id.radioGeneralFitness);
        if(sharedPreferences.getBoolean("is_strength", false))
            strength.setChecked(true);
        else
            fitness.setChecked(true);
    }

    private void savePreferences(String key, String value) {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }
    private void saveGenderInPreference() {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();

        radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
        int selectedId = radioSexGroup.getCheckedRadioButtonId();
        if(selectedId == R.id.radioMale)
            editor.putBoolean("is_male", true);
        else
            editor.putBoolean("is_male", false);

        editor.commit();
    }

    private void saveTargetinPreference(){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();

        radioTargetGroup = (RadioGroup) findViewById(R.id.radioTarget);
        int selectedId = radioTargetGroup.getCheckedRadioButtonId();
        if(selectedId == R.id.radioStrength)
            editor.putBoolean("is_strength", true);
        else
            editor.putBoolean("is_strength", false);

        editor.commit();

    }

    class Button_Clicker implements Button.OnClickListener {
        public void onClick(View v) {
            // TODO Auto-generated method stub
                if
                    (//("\d+(?:\.\d+)?"))
                        //(editText.getText().toString().matches("[a-zA-Z]+") || editText2.getText().toString().matches("[a-zA-Z]+") && editText3.getText().toString().matches("[a-zA-Z]+"))
                   (editText.getText().toString().trim().length() == 0 || editText2.getText().toString().trim().length() == 0 || editText3.getText().toString().trim().length() == 0)
                    ) {
                Toast.makeText(getApplicationContext(), "Please enter values in all the fields!", Toast.LENGTH_LONG).show();
                return;
            }

            int age = Integer.parseInt(editText2.getText().toString());
            if (age < 18){
                Toast.makeText(getApplicationContext(), "Please enter a valid age!", Toast.LENGTH_LONG).show();
                return;
            }

            savePreferences("storedweight", editText.getText().toString());
            savePreferences("storedage", editText2.getText().toString());
            savePreferences("storedheight", editText3.getText().toString());
            saveGenderInPreference();
            saveTargetinPreference();
            finish();

        }}

    class reset_clicker implements Button.OnClickListener {
        public void onClick(View v) {

            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); // here you get your prefrences by either of two methods
            Editor editor = sharedPreferences.edit();
            editor.clear();
            editor.commit();
            editText.setText("");
            editText2.setText("");
            editText3.setText("");
            button.setEnabled(true);
            Toast.makeText(getApplicationContext(), "You have reset the values! Please enter new values before continuing!", Toast.LENGTH_LONG).show();
        }

    }
    }

您可以查看是否保存了任何内容。

@Override
protected void onResume() {
    super.onResume();
    String isSaved = sharedPreferences.getString("Key", "not_saved");
    if (isSaved.equals("not_saved"){ 
        button.setEnabled(true);
    }else{
        button.setEnabled(false);
    }
}

编辑您可以添加已保存的首选项以查看是否已保存

public class Settings extends Activity {
    EditText editText, editText2, editText3;
    RadioGroup radioSexGroup, radioTargetGroup;

    Button button, resetbutton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        editText = (EditText) findViewById(R.id.editText);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText3 = (EditText) findViewById(R.id.editText3);
        button = (Button) findViewById(R.id.button8);
        button.setOnClickListener(new Button_Clicker());
        resetbutton = (Button) findViewById(R.id.resetbutton);
        resetbutton.setOnClickListener(new reset_clicker());
        loadSavedPreferences();

    }
    private void loadSavedPreferences() {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);

        String weight = sharedPreferences.getString("storedweight", "Your Weight");
        editText.setText(weight);
        String age = sharedPreferences.getString("storedage", "Your Age");
        editText2.setText(age);
        String height = sharedPreferences.getString("storedheight", "Your Height");
        editText3.setText(height);
        RadioButton male = (RadioButton)findViewById(R.id.radioMale);
        RadioButton female = (RadioButton)findViewById(R.id.radioFemale);
        if(sharedPreferences.getBoolean("is_male", false))
            male.setChecked(true);
        else
            female.setChecked(true);

        RadioButton strength = (RadioButton)findViewById(R.id.radioStrength);
        RadioButton fitness = (RadioButton)findViewById(R.id.radioGeneralFitness);
        if(sharedPreferences.getBoolean("is_strength", false))
            strength.setChecked(true);
        else
            fitness.setChecked(true);
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Check to see it is was saved
        loadSavedPreferences();
        String isSaved = sharedPreferences.getString("isSaved", "notSaved");
        if (isSaved.equals("saved"){
            button.setEnabled(false);
        }else{
            button.setEnabled(true);
        }
    }

    private void savePreferences(String key, String value) {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }
    private void saveGenderInPreference() {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();

        radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
        int selectedId = radioSexGroup.getCheckedRadioButtonId();
        if(selectedId == R.id.radioMale)
            editor.putBoolean("is_male", true);
        else
            editor.putBoolean("is_male", false);

        editor.commit();
    }

    private void saveTargetinPreference(){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();

        radioTargetGroup = (RadioGroup) findViewById(R.id.radioTarget);
        int selectedId = radioTargetGroup.getCheckedRadioButtonId();
        if(selectedId == R.id.radioStrength)
            editor.putBoolean("is_strength", true);
        else
            editor.putBoolean("is_strength", false);

        editor.commit();

    }

    class Button_Clicker implements Button.OnClickListener {
        public void onClick(View v) {
            // TODO Auto-generated method stub
                if
                    (//("\d+(?:\.\d+)?"))
                        //(editText.getText().toString().matches("[a-zA-Z]+") || editText2.getText().toString().matches("[a-zA-Z]+") && editText3.getText().toString().matches("[a-zA-Z]+"))
                   (editText.getText().toString().trim().length() == 0 || editText2.getText().toString().trim().length() == 0 || editText3.getText().toString().trim().length() == 0)
                    ) {
                Toast.makeText(getApplicationContext(), "Please enter values in all the fields!", Toast.LENGTH_LONG).show();
                return;
            }

            int age = Integer.parseInt(editText2.getText().toString());
            if (age < 18){
                Toast.makeText(getApplicationContext(), "Please enter a valid age!", Toast.LENGTH_LONG).show();
                return;
            }

            savePreferences("storedweight", editText.getText().toString());
            savePreferences("storedage", editText2.getText().toString());
            savePreferences("storedheight", editText3.getText().toString());
            // Save a string to saved and check it within onResume. 
            savePreferences("isSaved", "saved");
            saveGenderInPreference();
            saveTargetinPreference();
            finish();

        }}

    class reset_clicker implements Button.OnClickListener {
        public void onClick(View v) {

            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); // here you get your prefrences by either of two methods
            Editor editor = sharedPreferences.edit();
            editor.clear();
            editor.commit();
            editText.setText("");
            editText2.setText("");
            editText3.setText("");
            button.setEnabled(true);
            Toast.makeText(getApplicationContext(), "You have reset the values! Please enter new values before continuing!", Toast.LENGTH_LONG).show();
        }
    }
}

这样做:

 class Button_Clicker implements Button.OnClickListener {
    public void onClick(View v) {
        // TODO Auto-generated method stub
            if
                (//("\d+(?:\.\d+)?"))
                    //(editText.getText().toString().matches("[a-zA-Z]+") || editText2.getText().toString().matches("[a-zA-Z]+") && editText3.getText().toString().matches("[a-zA-Z]+"))
               (editText.getText().toString().trim().length() == 0 || editText2.getText().toString().trim().length() == 0 || editText3.getText().toString().trim().length() == 0)
                ) {
            Toast.makeText(getApplicationContext(), "Please enter values in all the fields!", Toast.LENGTH_LONG).show();
            return;
        }

        int age = Integer.parseInt(editText2.getText().toString());
        if (age < 18){
            Toast.makeText(getApplicationContext(), "Please enter a valid age!", Toast.LENGTH_LONG).show();
            return;
        }

        savePreferences("storedweight", editText.getText().toString());
        savePreferences("storedage", editText2.getText().toString());
        savePreferences("storedheight", editText3.getText().toString());
        saveGenderInPreference();
        saveTargetinPreference();
        savePreferences("alreadyStored","true");
        finish();

    }}

然后:

 private void loadSavedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);

    if (sharedPreferences.getString("alreadyStored",null) != null)
        button.setEnabled(false);
    else
        button.setEnabled(true);

    String weight = sharedPreferences.getString("storedweight", "Your Weight");
    editText.setText(weight);
    String age = sharedPreferences.getString("storedage", "Your Age");
    editText2.setText(age);
    String height = sharedPreferences.getString("storedheight", "Your Height");
    editText3.setText(height);
    RadioButton male = (RadioButton)findViewById(R.id.radioMale);
    RadioButton female = (RadioButton)findViewById(R.id.radioFemale);
    if(sharedPreferences.getBoolean("is_male", false))
        male.setChecked(true);
    else
        female.setChecked(true);

    RadioButton strength = (RadioButton)findViewById(R.id.radioStrength);
    RadioButton fitness = (RadioButton)findViewById(R.id.radioGeneralFitness);
    if(sharedPreferences.getBoolean("is_strength", false))
        strength.setChecked(true);
    else
        fitness.setChecked(true);
}

这会检查您是否已保存数据并根据此设置启用或不启用按钮