如何使用Android View Pager + ActionBar标签向Google Analytics发送视图?

Zoo*_*key 2 tabs android google-analytics android-fragments android-actionbar

我使用ViewPager和ActionBar标签向用户显示数据,我还想将当前屏幕发送到Google Analytics.

但我有问题,因为ActionBar标签的工作方式是他们正在加载当前和下一个片段的数据,因此在Google Analytics Real Time中我只显示下一个片段.

对于ActionBar标签中的每个片段,我将数据发送到Google Analytics,如下所示:

@Override
public void onStart() {
    // Get an Analytics tracker to report app starts & uncaught exceptions
    // etc.
    // Get tracker.
    Tracker t = ((MyApplication) getActivity().getApplication())
            .getTracker(TrackerName.APP_TRACKER);

    // Set screen name
    t.setScreenName(screenName);

    // Send a screen view.
    t.send(new HitBuilders.AppViewBuilder().build());
    super.onStart();
}
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

jen*_*ert 6

我发现在发送GA screenview事件之前检查每个片段的组合getUserVisibleHint()isResumed()内部组合是有效的.覆盖setUserVisibleHint(boolean)onResume()确保发送屏幕视图事件,而不管它们的调用顺序如何.

此解决方案解决了使用ViewPager.setOnPageChengeListener初始片段未被onPageSelected调用的问题.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  publishScreenViewEvent();
}

@Override
public void onResume() {
  super.onResume();
  publishScreenViewEvent();
}

private void publishScreenViewEvent() {
  // Only publish if this fragment is visible to the user and the fragment has been resumed.
  // setUserVisibleHint may be called before onResume and before this fragment is injected.
  // onResume may be called before setUserVisibleHint because this fragment is in a ViewPager that
  // caches the next and previous fragment by calling onResume before the fragment is visible
  if (getUserVisibleHint() && isResumed()) {
    // Send GA screenview event here
  }
}
Run Code Online (Sandbox Code Playgroud)