Andriod EditText теряет фокус после нажатия на расширяемый список просмотра родительских элементов - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть расширяемое представление списка, каждое представление имеет несколько текстовых представлений. Для слежения за редактированием фокуса текста и его данных я звоню setOnFocus слушателю. Но это работает только тогда, когда я изменяю свой фокус просмотра текста. Когда я выбираю или нажимаю «Новый родительский элемент», я теряю его фокус.

Пример кода

final ViewHolder holder;

@Override
public View getChildView(final int parent, final child, boolean b, View view, ViewGroup viewGroup) {

 holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        if (view == null) {
           holder = new ViewHolder();
           holder.editText = view.findViewById(R.id.txtRecordComment);
        } else {
           holder = (ViewHolder) view.getTag();
        }


        holder.editText.setText(map.get("ed_" + parent + "" + child));

        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if(!hasFocus)
              map.put("ed_" + parent + "" + child, holder.editText.getText().toString());
        }

    });
}

Код работает нормально, если я изменяю фокус editText, но он не сохраняется, если я нажимаю на следующий родительский элемент

Есть ли у них возможность использовать функцию Key Up ??

1 Ответ

0 голосов
/ 02 ноября 2018

Вы должны реализовать класс TextWatcher, если хотите использовать функцию onKeyUp.

EditText tv_filter = (EditText) findViewById(R.id.filter);

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (filterLongEnough()) {
            populateList();
        }
    }

    private boolean filterLongEnough() {
        return tv_filter.getText().toString().trim().length() > 2;
    }
};
tv_filter.addTextChangedListener(fieldValidatorTextWatcher);
...