如何知道页面是从Viewpager的Tab的Swipe还是Click中选择的

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 的滑动?

dea*_*ish 6

这是我的解决方案。我基于单个变量。

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)。

预览:

在此处输入图片说明


rav*_*idl 0

您使用的选项卡视图是文本视图。所以这个textview会有onclicklistener。您可以通过侦听器的 onClick() 方法跟踪选项卡点击!