[英]How to call a method from another class on Android?
我是編程的初學者。 我在活動之外有一個功能,當用戶在 EditText 內鍵入時,應用程序會顯示一個 x 以清除表單。 當我調用這個函數時會發生錯誤: android.content.res.Resources android.content.Context.getResources ()
on a null object reference at android.content.ContextWrapper.getResources
如果我留在同一個類中它可以工作,但是我將在其他活動中大量使用此功能
我研究了很多但找不到解決方案
活動.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);
}
}
表單控件
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
類擴展了一個Activity
,這似乎是這里的問題。
1 - 刪除您班級中的extend
關系。
public class FormControl
2 - 傳遞FormControl
當前Activity
的上下文
private Context context;
public FormControl(Context context){
this.context = context
}
3 - 從當前上下文中獲取資源。
final Drawable x = context.getResources().getDrawable( R.drawable.ic_action_navigation_close);
4 - 獲取FormClass
的對象
FormControl formcontrol = new FormControl(this);
這是不允許的。
FormControl formcontrol = new FormControl();
formcontrol.ajustaEditText(edtName);
你有一個意圖開始活動,將數據作為意圖包對象傳遞。 檢查下面的示例。
FormControl 是活動,您不能創建活動的實例,也可以獲取活動的實例。
public static FormControl instance;
public class FormControl extends AppCompatActivity {
public static FormControl getInstance() {
return instance;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
}
您必須在要訪問getResources()
任何地方傳遞活動的Context
。
就這樣吧……
活動課
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(this, edtName);
}
}
表單控件類
public class FormControl {
public void ajustaEditText(Context context,final EditText et){
String value = "";
final Drawable x = context.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) {
}
});
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.