Java 单击“侦听器不工作”

Java 单击“侦听器不工作”,java,android,android-viewpager,onclicklistener,Java,Android,Android Viewpager,Onclicklistener,我的ViewPager有问题,我在电脑上的模拟器上有一个OnClickListener所有标签点击,但是在我的手机上有点奇怪,只有中间的标签点击,其他两个根本没有。我甚至把日志放在那里,他们什么都没记录。更糟糕的是,没有错误,只是没有任何作用 Small Part vpPager.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

我的ViewPager有问题,我在电脑上的模拟器上有一个
OnClickListener
所有标签点击,但是在我的手机上有点奇怪,只有中间的标签点击,其他两个根本没有。我甚至把日志放在那里,他们什么都没记录。更糟糕的是,没有错误,只是没有任何作用

Small Part
    vpPager.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (vpPager.getCurrentItem() == 0) {
                zmanimListPopUp();
            } else if (vpPager.getCurrentItem() == 1) {
                zmanimListPopUp();
            } else if (vpPager.getCurrentItem() == 2) {
                zmanimListPopUp();
            }

        }


    });
请帮帮我

谢谢

更新

大部分

 vpPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            prefs.edit().putInt("currentFragmentItem", position).commit();
            Log.d("MainActivity", "Position: " + prefs.getInt("currentFragmentItem", 1));
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });


    vpPager.setCurrentItem(prefs.getInt("currentFragmentItem", 1));
    Log.d("MainActivity", "Position on launch: " + prefs.getInt("currentFragmentItem", 1));


    DotsIndicator dotsIndicator = (DotsIndicator) findViewById(R.id.dots_indicator);
    dotsIndicator.setViewPager(vpPager);
    dotsIndicator.setPointsColor(Color.rgb(142, 96, 97));

    onClickListener();

}

private void onClickListener() {


    vpPager.setOnTouchListener(
            new View.OnTouchListener() {
                private boolean moved;

                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                        moved = false;
                    }
                    if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
                        moved = true;
                    }
                    if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                        if (!moved) {
                            view.performClick();
                        }
                    }

                    return false;
                }
            }
    );

    vpPager.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (vpPager.getCurrentItem() == 0) {
                zmanimListPopUp();
            } else if (vpPager.getCurrentItem() == 1) {
                zmanimListPopUp();
            } else if (vpPager.getCurrentItem() == 2) {
                zmanimListPopUp();
            }

        }


    });


}
所作的修改:

    vpPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        // This method will be invoked when a new page becomes selected.
        @Override
        public void onPageSelected(int position) {


        }

        // This method will be invoked when the current page is scrolled
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            vpPager.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (vpPager.getCurrentItem() == 0) {
                        zmanimListPopUp();
                    } else if (vpPager.getCurrentItem() == 1) {
                        zmanimListPopUp();
                    } else if (vpPager.getCurrentItem() == 2) {
                        zmanimListPopUp();
                    }

                }


            });
        }

        // Called when the scroll state changes:
        // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
        @Override
        public void onPageScrollStateChanged(int state) {
            // Code goes here
        }
    });

在android应用程序中实现标签时,我们面临自动加载上一个/下一个标签数据的问题。但是我们可以通过添加“setUserVisibleHint”方法来停止材质选项卡或页面滑动选项卡的这种情况。将此方法添加到所有选项卡的片段中,并使用此方法加载所有操作。此方法仅在其选项卡处于选中状态时加载片段数据,因此每次加载一个选项卡

// initialize boolean to know tab is already loaded or load first time
private boolean isFragmentLoaded=false;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && !isFragmentLoaded ) {
        // Load your data here or do network operations here
        isFragmentLoaded = true;
    }
}

请尝试vpPager.setOnPageChangeListener。。。。。和public void onPageSelected(int position){}从内部侦听所选页面并返回页面的位置,并相应地采取操作,就像您编写的代码一样

 tvPager.setOnPageChangeListener(new OnPageChangeListener() {

        // This method will be invoked when a new page becomes selected.
        @Override
        public void onPageSelected(int position) {
            if (position == 0) {
                    zmanimListPopUp();
                } else if (position == 1) {
                    zmanimListPopUp();
                } else if (position == 2) {
                    zmanimListPopUp();
                }

        }

        // This method will be invoked when the current page is scrolled
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            // Code goes here
        }

        // Called when the scroll state changes: 
        // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
        @Override
        public void onPageScrollStateChanged(int state) {
            // Code goes here
        }
    });

是否尝试使用调试器运行它?记录一个简单字符串,并在单独的语句中记录vpPager.getCurrentItem()的值。将两者置于if/elseif结构之外,检查是否检测到点击,如果检测到,为什么不调用弹出方法。发布足够的代码(适配器)。@Sam我已经这样做了,并且数字匹配,只是为了注意它昨天确实起作用,我没有更改该区域的代码。这很奇怪。@Henry我没有,从来没有在android上使用过它。我有点不明白该把它放在哪里,以及为什么需要它,thanksIm抱歉,我有点困惑,我是android新手,这两个东西到底会做什么?我已经用更多的代码更新了这个问题,以便对这个问题有所了解。只要单击一次,onClick就会触发,如果这是您想要的,那么很好,但是如果您想要基于所选页面运行代码,那么就使用以下命令:我已添加到我的答案中。谢谢!我做了一些更改,我不确定它们是否正确,但它只适用于中间的一个。我不确定onClick的位置以及它如何处理
onPageScrolled
onPageScrollStateChanged
我想你应该把它放在onpageSelected下面(我在答案中添加的方式)。让我来了解一下您想要在这里实现什么,换句话说,[ZmaniListPopup();]应该做什么?如果您按照前面提到的那样做,您的代码应该在导航页面时运行,并且变量位置将传入页码,您可以使用它来做出正确的决定(正如我从您的旧代码中可以理解的那样)