В моем случае у меня есть две действия, которые содержат ViewPager с относительными фрагментами.
Итак, ситуация примерно такая:
Activity1 (ViewPager): фрагмент1, фрагмент2, фрагмент3, фрагмент n ...
Activity2 (ViewPager): Фрагмент A, Фрагмент B, Фрагмент C, Фрагмент m ...
Fragment2 содержит ExpandibleListView проектов, которые по OnClickListener вызывают Activity2 с startActivity (намерением) для отображения подробностей и других материалов.
FragmentB внутри Activity2 может изменить одну информацию, которая является именем выбранного элемента, в ExpandibleListView, и когда я изменяю имя проекта, я обновляю текущий фрагмент B этим кодом (путем отсоединения и повторного присоединения текущего фрагмента):
Fragment frg_feedDetails = adapter.getItem(viewPager.getCurrentItem());
final FragmentTransaction frg_feedDetailsTransaction = getSupportFragmentManager().beginTransaction();
frg_feedDetailsTransaction.detach(frg_feedDetails);
frg_feedDetailsTransaction.attach(frg_feedDetails);
frg_feedDetailsTransaction.commitAllowingStateLoss();
// Update Activity title
Objects.requireNonNull(getSupportActionBar()).setTitle(projectName + ":" + projectFeed.browse(currentObject).get("name"));
Проблема появляется, когда пользователь нажимает назад или нажимает верхнюю стрелку назад и возвращается от FragmentB к Activity1, которые содержат ExpandibleListView.
Если пользователь делает это, ExpandibleListView со списком проектов не получает новое имя, я должен переключить некоторые фрагменты в Activity1, прежде чем это произойдет.
Чтобы избежать этого, я добавляю этот код в Activity1:
public void onResume() {
super.onResume();
/* FIXME maybe is not the best way to do that but without this override if user change name
* of feed when press back button (or back arrow) the expandible listview don't refresh items name
* by adding and removing fragment we get the results
*/
if (fragmentProjectFeeds != null && fragmentProjectFeeds.isVisible()) {
Fragment frg_projectFeeds = adapter.getItem(viewPager.getCurrentItem());
final FragmentTransaction ft_projectFeeds = getSupportFragmentManager().beginTransaction();
ft_projectFeeds.detach(frg_projectFeeds);
ft_projectFeeds.attach(frg_projectFeeds);
ft_projectFeeds.commit();
}
}
Я надеюсь, что есть лучший способ добиться этого, потому что этот onResume, если пользователь нажимает назад и не меняет имя, отсоединит и снова присоединит фрагмент без смысла.
Я бы попросил сообщество как-нибудь лучше справиться с этой ситуацией.