【发布时间】:2018-03-01 06:08:18
【问题描述】:
我是编程初学者。我在活动之外有一个函数,当用户在 EditText 中键入时,应用程序会显示一个 x 以清除表单。当我调用此函数时,会发生错误:
android.content.res.Resources android.content.Context.getResources () 在 android.content.ContextWrapper.getResources 的空对象引用上
如果我离开同一个班级,它可以工作,但是我会在其他活动中大量使用这个功能
我研究了很多,但找不到解决方案
Activity.java
public class Activity extends AppCompatActivity{
EditText edtName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acitivty);
edtName = (EditText)findViewById(R.id.edt1);
FormControl formcontrol = new FormControl();
formcontrol.ajustaEditText(edtName);
}
}
FormControl.java
public class FormControl extends AppCompatActivity {
public void ajustaEditText(final EditText et){
String value = "";
final Drawable x = getResources().getDrawable( R.drawable.ic_action_navigation_close);
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight());
et.setCompoundDrawables(null, null, value.equals("") ? null : x, null);
et.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (et.getCompoundDrawables()[2] == null) {
return false;
}
if (event.getAction() != MotionEvent.ACTION_UP) {
return false;
}
if (event.getX() > et.getWidth() - et.getPaddingRight() - x.getIntrinsicWidth()) {
et.setText("");
et.setCompoundDrawables(null, null, null, null);
}
return false;
}
});
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
et.setCompoundDrawables(null, null, et.getText().toString().equals("") ? null : x, null);
}
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
}
}
【问题讨论】:
-
为什么
FormControl扩展AppCompatActivity?这不是一项活动。