Обновление ExpandableListView внутри фрагмента из другого действия (не родительского действия) - PullRequest
0 голосов
/ 11 января 2019

В моем случае у меня есть две действия, которые содержат 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, если пользователь нажимает назад и не меняет имя, отсоединит и снова присоединит фрагмент без смысла.

Я бы попросил сообщество как-нибудь лучше справиться с этой ситуацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...