Joh*_*ohn 5 android android-viewpager android-tabs android-toolbar
我有一个工具栏选项卡的 ViewPager。
我必须知道用户点击标签的次数以及用户滑动和选择页面的次数。
为此,我正在使用 ViewPager.OnPageChangeListener()。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override public void onPageSelected(int position) {
// Here i am sending the GA event
}
@Override public void onPageScrollStateChanged(int state) {
}
});
Run Code Online (Sandbox Code Playgroud)
OnPageSelected 被调用用于单击和滑动页面。我将如何区分所选页面是从选项卡的点击还是从 Viewpager 的滑动?
这是我的解决方案。我基于单个变量。
public class MainActivity extends AppCompatActivity {
// remember last action
private Action lastAction = Action.RESET;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
mViewPager = findViewById(R.id.viewPager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
// No-op
}
@Override
public void onPageSelected(int i) {
if (lastAction == Action.RESET) {
lastAction = Action.SWIPE;
Log.d(TAG, "onPageSelected: SWIPED");
} else {
lastAction = Action.RESET;
}
}
@Override
public void onPageScrollStateChanged(int i) {
// No-op
}
});
mTabLayout = findViewById(R.id.tabLayout);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (lastAction == Action.RESET) {
lastAction = Action.SELECT;
Log.d(TAG, "onPageSelected: SELECTED");
} else {
lastAction = Action.RESET;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
// No-op
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
// No-op
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
局限性:
必须在添加侦听器之前加载 viewPager 的内容,因为此解决方案基于有序调用(onTabSelected、onPageSelected)。
预览:
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |