Создание идентификатора глобальной транзакции, доступного через несколько пакетов

Прежде всего, отслеживайте все «активные» фрагменты. В этом случае вы отслеживаете страницы фрагментов в FragmentStatePagerAdapter, которые используются ViewPager.

@Override
public Fragment getItem(int index) {
    Fragment myFragment = MyFragment.newInstance();
    mPageReferenceMap.put(index, myFragment);
    return myFragment;
}

Чтобы избежать ссылки на «неактивные» фрагментные страницы, вам необходимо реализовать FragmentStatePagerAdapter destroyItem (...):

@Override
public void destroyItem (ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
    mPageReferenceMap.remove(position);
}

, и когда вам нужно получить доступ к отображаемой в данный момент странице, вы вызываете:

int index = mViewPager.getCurrentItem();
MyAdapter adapter = ((MyAdapter)mViewPager.getAdapter());
MyFragment fragment = adapter.getFragment(index);

Где getFragment (int) MyAdapter метод выглядит следующим образом:

public MyFragment getFragment(int key) {
    return mPageReferenceMap.get(key);
}

Надеюсь, это поможет!

0
задан sz2014 17 January 2019 в 01:39
поделиться

1 ответ

В конце мы использовали контекст Thread в Log4J. Вероятно, это не лучшее решение, поскольку мы смешиваем цель одного и того же, но вот как мы это сделали:

Идентификатор процесса извлекается так: org.apache.logging.log4j.ThreadContext.get("RequestId");

И инициировано в Handler Chain (зависит от того, какую службу вы используете): ThreadContext.put("RequestId", Objects.toString(job.getId(), (String)null));
Это происходит на каждой полученной работе.

Отказ от ответственности: Это решение еще не было полностью протестировано, но это направление, в котором мы идем

0
ответ дан sz2014 17 January 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: