我在TextWatcher
上使用EditText
。当我在edittext
中输入内容时,它完美无缺,但是当我从数据库中将数据设置为edittext
时获取NullPointerException
。我在onTouchListener
上使用了Edittext
。我的问题是。
如果触摸事件为真,我可以检查TextWatcher
是否有效的条件。
EditText det=(EditText) findViewById(R.id.det);
det.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println(v.getId());
d_id=v.getId();
if (event.getAction() == MotionEvent.ACTION_UP) {
getPopUp(det);
}
return false;
}
});
当我在det上调用setText时,它转到TextWatcher
det.setText(ft.get_det().toString());
TextWatcher
@Override
public void afterTextChanged(Editable string) {
try {
int rp=0;
det=(EditText)findViewById(d_id);
s_id=d_id-4;
sev=(EditText)findViewById(s_id);
o_id=d_id-2;
occ=(EditText)findViewById(o_id);
rp=d_id+1;
rpn=(TextView)findViewById(rp);
if (sev.getText().length() > 0
|| occ.getText().length() > 0
|| sev.getText().length() == 0) {
if (string.length() > 0) {
int s, o, d, r;
System.out.println(sev.getId());
System.out.println(det.getId());
s = Integer.parseInt(sev.getText().toString());
o = Integer.parseInt(occ.getText().toString());
d = Integer.parseInt(det.getText().toString());
r = s * o * d;
String m = r + "";
rpn.setText(m);
} else {
// det.setText("");
// rpn.setText("");
System.out.println("In else");
// makeToast();
}
}
} catch (Exception e) {
det.setText("");
rpn.setText("");
System.out.println("IN Exception");
makeToast();
}
}
};
答案 0 :(得分:21)
创建一个TextWatcher,如下所示
TextWatcher textWatcher=new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
然后将其添加到EditText调用
EditText.addTextChangedListener(textWatcher);
并删除电话
EditText.removeTextChangedListener(textWatcher);
答案 1 :(得分:2)
我通过获取一个全局布尔变量来解决这个问题。在onTouchListener中将此变量设为true 并检查afterTextChanged方法中的条件,即if变量为true。