我需要这样的东西,当用户在editText部分输入数字时,应该同时向屏幕显示数字总数的模数。所以我使用onTextChanged,我将字符转换为int并将此值设置为a TextView.It没有工作。问题可能是由于将字符序列转换为int而发生的。
editText1=(EditText) findViewById(R.id.editText1);
editText1.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after {
}
public void onTextChanged(CharSequence s, int start,int before, int count) {
TextView showNumber = (TextView) findViewById(R.id.showNumber);
int i=0;
int n= Integer.parseInt(s.toString());
i=(i+n)%10;
showNumber.setText(i);
}});
答案 0 :(得分:2)
好的,对Android文档的快速研究表明,EditText
扩展了TextView
这个方法:
public final void setText (int resid)
您作为[{1}}方法的参数传递的i
属于setText()
类型,这意味着它被用作要转换为文本的资源ID。它无法在int
中找到具有此ID的资源,因此我认为它崩溃了。
您需要做的是将string.xml
转换为i
并将其传递给CharSequence
方法,如下所示:
setText()
答案 1 :(得分:1)
尝试
showNumber.setText(String.valueOf(i));
根据您的代码,您正在初始化i = 0
。无需将n
添加到i
,因为它始终为zero
答案 2 :(得分:1)
在onCreate()
中声明textview试试这个:
editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start,int before, int count) {
int n= Integer.valueOf(s.toString().trim());
i=(i+n)%10;
textView.setText(""+i);
}});
答案 3 :(得分:1)
请尝试这种方式,希望这有助于您解决问题。
<强> main.xnl 强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<EditText
android:id="@+id/edtInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txtModulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"/>
</LinearLayout>
<强> MyActivity.java 强>
public class MyActivity extends Activity{
private EditText edtInput;
private TextView txtModulo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edtInput = (EditText) findViewById(R.id.edtInput);
txtModulo = (TextView) findViewById(R.id.txtModulo);
edtInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.toString().trim().length()>0){
txtModulo.setText(String.valueOf((Integer.parseInt(s.toString().trim())%10)));
}else{
txtModulo.setText("");
}
}
});
}
}
答案 4 :(得分:1)
试试这个,
ditText1=(EditText) findViewById(R.id.editText1);
ditText1.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after {
}
public void onTextChanged(CharSequence s, int start,int before, int count) {
TextView showNumber = (TextView) findViewById(R.id.showNumber);
int i=0;
int n= Integer.parseInt(ditText1.getText().toString());
i=(i+n)%10;
showNumber.setText(Integer.toString(i));
}});