Я новичок в программировании. У меня есть функция вне действия, когда пользователь вводит внутри 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) {
            }
        });

    }


}
-3
Everton Fraga 1 Мар 2018 в 09:08

4 ответа

Лучший ответ

Ваш FormControl класс расширяет Activity, что, похоже, является проблемой здесь.

1 - Удалить отношение extend в вашем классе.

public  class FormControl 

2 - передать контекст текущего Activity FormControl

 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);
2
M.Waqas Pervez 1 Мар 2018 в 06:14

Это не разрешено

    FormControl formcontrol = new FormControl();

    formcontrol.ajustaEditText(edtName);

У вас есть начальная активность с намерением, передача данных как объект связки намерений. проверьте пример ниже.

Как передать данные между действиями в приложении Android?

1
Sush 1 Мар 2018 в 06:13

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;
}
}
0
Aj 27 1 Мар 2018 в 06:13

Вам нужно будет пропустить Context действия везде, куда вы хотите получить доступ getResources().

ТАК иди так ...

Класс активности

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);

    }
}

Класс FormControl

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) {
        }
    });
}}
0
buzzingsilently 1 Мар 2018 в 06:23