簡體   English   中英

如何從Android上的另一個類調用方法?

[英]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);

你有一個意圖開始活動,將數據作為意圖包對象傳遞。 檢查下面的示例。

如何在 Android 應用程序中的活動之間傳遞數據?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM