У меня есть фрагмент внутри другого фрагмента.Потому что я использую его в другом месте.
Фрагмент 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» или нажимает на другое поле, значение передается «ОК», и все в порядке.)
Как заставить событие кнопки сработать после заполнения всех полей.Возможно, есть лучший способ написать код для этих событий.