نشناختن ورودی به عنوان عدد!
من میخواستم مقدار عدد ورودی که کاربر میزنه به ازای هر سه تا صفر یه کاما بزاره! یعنی 20000 رو 20,000 نشون بده! واسه همین از یه textwatcher به شکل زیر استفاده کردم :
import java.text.DecimalFormat;
import java.text.ParseException;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class NumberTextWatcher implements TextWatcher {
private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;
private EditText et;
public NumberTextWatcher(EditText et)
{
df = new DecimalFormat("#,###.##");
df.setDecimalSeparatorAlwaysShown(true);
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFracti /> }
@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";
@Override
public void afterTextChanged(Editable s)
{
et.removeTextChangedListener(this);
try {
int inilen, endlen;
inilen = et.getText().length();
String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
if (hasFractionalPart) {
et.setText(df.format(n));
} else {
et.setText(dfnd.format(n));
}
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
if (sel > 0 && sel <= et.getText().length()) {
et.setSelection(sel);
} else {
// place cursor at the end?
et.setSelection(et.getText().length() - 1);
}
} catch (NumberFormatException nfe) {
// do nothing?
} catch (ParseException e) {
// do nothing?
}
et.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
{
hasFracti /> } else {
hasFracti /> }
}
}
بعد با یه listener توی mainActivity اون به ادیت تکست دادم :
amount.addTextChangedListener(new NumberTextWatcher(amount));
حالا متاسفانه ورودی رو به عنوان عدد نمیتونه بخونه!
قبلا از کد های getText().toString() و بعدش هم parseDouble استفاده کردم ولی جواب نمیده! ممنون میشم راه حل بدید :)

فکر کنم این چیزیه که یک تیم میخواد ! ، ورودی رو از نوع لانگ گرفتم ، بعد این که تایپ تموم شد انجامش بدی بهتره
String pattern = "###,###"; DecimalFormat decimalFormat = new DecimalFormat(pattern); String format = decimalFormat.format(1234567890123456789L); Log.i("YekTeam", "" + format);

  خب متن ورودی رو به عنوان یه string بگیر ، بعد با دستور replace کاما ها رو با "" جایگزین کن و متن باقی مونده رو با همون ParseDouble به عدد تبدیل کن

نشد! قسمتی از کد رو میزارم!
amount.addTextChangedListener(new NumberTextWatcher(amount));
calc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String amount1 =amount.getText().toString();
amount1.replace(",","");
try{
double i = Double.parseDouble(amount1);
//doing some calculations :D
}
catch(NumberFormatException e){
Toast.makeText(MainActivity.this, "مقدار را وارد نکرده اید", Toast.LENGTH_LONG).show();
}
}
});

خب از دستور replace اشتباه استفاده کردی.
اینو تست کن حتما جواب میده :
amount1 = amount1.replace(",", "");
ولی از کدت خوشم اومد. ;)
خودت نوشتیش یا از جایی پیداش کردی؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .