Java 单击“侦听器不工作”
我的ViewPager有问题,我在电脑上的模拟器上有一个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) {
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();]应该做什么?如果您按照前面提到的那样做,您的代码应该在导航页面时运行,并且变量位置将传入页码,您可以使用它来做出正确的决定(正如我从您的旧代码中可以理解的那样)