gpt4 book ai didi

java - 多个 EditText 框的 textChanged 方法

转载 作者:行者123 更新时间:2023-11-30 04:23:31 26 4
gpt4 key购买 nike

大家好我已经按照下面的例子http://www.google.com/codesearch#search/&q=NumberFormattingTextWatcher&exact_package=android&type=cs

我将 CurrencyTextWatcher 作为一个单独的类。我需要这个,因为我将应用于多个页面。我不明白为什么,但是如果我使用 setContentView(text) 它将只作为 1 个大文本框工作,那么我就看不到我的 xml 的其余部分。
如果我使用 setContentView(R.layout.main); 我的 xml 正常工作,除了 TextWatcher 不会为我的 txta EditText 框

Java

public class CalcTestActivity extends Activity {
private EditText txta;
private TextView txtb;
private TextView txtc;
private EditText text;

private double a = 0;
private double b = 0;
private double c = 0;

private Button buttonCalc;

/** Called when the activity is first created. */
@Override


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

initControls();
text = new EditText(this);
text.addTextChangedListener(new CurrencyTextWatcher());
//setContentView(text);
}

private String FormatValue(double value)
{
NumberFormat nf = NumberFormat.getInstance();
return "$ "+ nf.format(value);
}

private void initControls() {

txta = (EditText)findViewById(R.id.txta);
txtb = (TextView)findViewById(R.id.txtb);
txtc = (TextView)findViewById(R.id.txtc);

buttonCalc = (Button)findViewById(R.id.buttonCalc);
buttonCalc.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {calculate(); }

private void calculate() {

a=Double.parseDouble(txta.getText().toString());

b=Math.round(a*.88);
txtb.setText(FormatValue(b));

c=Math.round((a*.87)-(b*.28));
txtc.setText(FormatValue(c));
}

});
}
}

CurrencyTextWatcher 类

public class CurrencyTextWatcher implements TextWatcher {

boolean mEditing;

public CurrencyTextWatcher() {
mEditing = false;
}

public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(!mEditing) {
mEditing = true;

String digits = s.toString().replaceAll("\\D", "");
NumberFormat nf = NumberFormat.getCurrencyInstance();
try{
String formatted = nf.format(Double.parseDouble(digits)/100);
s.replace(0, s.length(), formatted);
} catch (NumberFormatException nfe) {
s.clear();
}

mEditing = false;
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}

XML

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Number1"
android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
android:id="@+id/txta"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:numeric="integer"/>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Number2"
android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
android:id="@+id/txtb"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Answer is"
android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
android:id="@+id/txtc"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:hint="0" />

<Button
android:id="@+id/buttonCalc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calculate" />

</LinearLayout>

最佳答案

我拿走了你的代码。我观察到您在此处共享的代码是从 xml 获取所有 View 。在这种情况下,您正在调用

 text.addTextChangedListener(new CurrencyTextWatcher());

在您的 onCreate 方法中,其中文本是使用 java 完成的。您不会收到 onTextChanged、beforeTextChanged 或 afterTextChanged 的​​回电,因为您的所有 View 都来自 xml。所以请在你的

initControls(); 

在 onCreate() 中添加下面一行

 txta.addTextChangedListener(new CurrencyTextWatcher());

和评论

text.addTextChangedListener(new CurrencyTextWatcher());

那一行是不需要的。我已验证其工作正常。

如果作品投票并接受答案

关于java - 多个 EditText 框的 textChanged 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com