Как расставить приоритеты для событий? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть фрагмент внутри другого фрагмента.Потому что я использую его в другом месте.

Фрагмент A содержит кнопку и onClickListener;Фрагмент B содержит форму (несколько полей).Фрагмент A вызывает фрагмент B вместе со слушателем (соблюдая интерфейс в B) - который срабатывает, когда поле заполнено (т. Е. Теряет фокус).

Фрагмент A: (извлечение)

button.setOnClickListener(v -> {
    process();
});

Fragment fragmentB = FragmentB.newInstance(new FragmentB. onFragmentB()
{
    @Override
    public void gotValue(String key, String value)
    {
        store(key, value);
    }
}
loadFragment(fragmentB, R.id.my_child_frame_layout);

Фрагмент B: (извлечение)

interface onFragmentB
{
    public void gotValue(String key, String value);
}
private onFragmentB listener;

fieldA.setOnFocusChangeListener((view, b) -> {
    if (!b)
        listener.gotValue((String) ((TextView)view).getHint(), ((TextView)view).getText().toString().trim());
});

Эта настройка позволяет приложению отображать форму (из B) и кнопку (из A).При нажатии кнопки происходит событие и обрабатывается значение поля.

Проблема заключается в том, что значение для последнего поля (на B) не фиксируется (с помощью onFocus B) перед событием кнопки.(Если пользователь нажимает клавишу «Tab» или нажимает на другое поле, значение передается «ОК», и все в порядке.)

Как заставить событие кнопки сработать после заполнения всех полей.Возможно, есть лучший способ написать код для этих событий.

...