EditText保存在SharedPref中,格式合计

时间:2016-11-03 09:39:19

标签: android android-edittext

我有一个EditText,价格为15美元或15欧元。这取决于您手机的货币。 问题是,当我更改EditText的文本时,我想在SharedPreference中仅保存小数,但我想再次设置我的EditText文本:例如15美元或15欧元。 为此,也许我应该只编辑小数而不是货币。但我不知道该怎么做。

目前,我有:

editTextPrice.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                String price = editable.toString().replaceAll("\\D+",""); // take only decimal for the price
                Preferences.setPrice(getContext(), price);
                editTextPrice.setText(Format.formatPrice(price));
            }
        });

此解决方案的问题是我的afterTextChanger中的setText。它让我成为一个无限循环,因为它总是在改变我的文本。

也许这不是解决方案。也许我只需要将货币放在左边或右边,可以编辑小数。但不知道我该怎么做。

我有点失落:/

感谢。

2 个答案:

答案 0 :(得分:1)

防止无限循环您可以添加变量标志,如下所示:

editTextPrice.addTextChangedListener(new TextWatcher() {

            boolean ignoreChange = false;

            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                if (!ignoreChange) {
                    String price = editable.toString().replaceAll("\\D+",""); // take only decimal for the price
                    Preferences.setPrice(getContext(), price);
                    ignoreChange = true;
                    editTextPrice.setText(Format.formatPrice(price));
                    ignoreChange = false;
                }
            }
        });

而不是afterTextChanged(Editable editable)中的editTextPriceignoreChange = true; ignoreChange = false;更改为result <- data.frame(org_A = c(130, 312, 123), x = c(44, 33, 12), y = c(55, 62, 43), z = c(66, 77, 55)) answer <- rep(NA, (ncol(result) - 1)) for (i in 2:ncol(result)) { answer[i-1] <- wilcox.test(result$org_A, result[, i], alternative = c("two.sided"), paired = FALSE)$p.value } answer [1] 0.1 0.1 0.1 ... sapply,并使用$或€来做你的魔法。

答案 1 :(得分:0)

答案很简单。假设您将货币保存在变量currency中,只需使用

获取EditText的内容即可
String content = et.getText().toString()

然后,当您想要保存没有货币的值时,请使用replace(oldChar,newChar)并用空字符串替换货币。

String value = content.replace(currency,"");

您将获得双重或整数值,并可以将其保存到SharedPreferences。