gpt4 book ai didi

Android ViewPager 的 onPageScrollStateChanged 永远不会被调用

转载 作者:IT老高 更新时间:2023-10-28 22:04:58 27 4
gpt4 key购买 nike

我已经扩展了 ViewPager 类并实现了 onPageChangeListener。我将此 ViewPager 与 SherlockFragment 内的 CirclePageIndicator 结合使用。 ViewPager 包含 ImageViews 和 TextViews,没什么特别的。

每次更改页面时,我都需要在 ViewPager 下方执行一些操作。所以,我想我需要使用 onPageScrollStateChanged 并验证状态何时为 IDLE 或其他什么。

问题在于,在 3 个实现的方法(onPageScrollStateChanged、onPageSelected 和 onPageScrolled)中,只有 onPageScrolled 被调用(我检查了每个方法中的日志消息)。这是为什么 ?代码如下。

public class UninterceptableViewPager extends ViewPager implements OnPageChangeListener{

private ArrayList<TwoRowListViewAdapter> mAdaptersList = null;
private ListView mListView = null;
private ProgressBar mProgressBar = null;


public UninterceptableViewPager(Context context, AttributeSet attrs)
{
super(context, attrs);
}

public boolean onInterceptTouchEvent(MotionEvent event)
{
getParent().requestDisallowInterceptTouchEvent(true);
return super.onInterceptTouchEvent(event);
}


public void setAdaptersList(ArrayList<TwoRowListViewAdapter> adaptersList)
{
mAdaptersList = adaptersList;
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
super.onPageScrolled(position++, positionOffset, positionOffsetPixels);
if (positionOffset == 0) // FIXME
loadHistoryPage(position);
}

@Override
public void onPageSelected(int position) {}

@Override
public void onPageScrollStateChanged(int state) {}


// -------------------------------------------------------------------------------------------
// -------------- Helper Methods
// -------------------------------------------------------------------------------------------


public void setListView(ListView listview)
{
mListView = listview;
}

public void setProgressBar(ProgressBar progressBar)
{
mProgressBar = progressBar;
}

private void loadHistoryPage(int position)
{
mListView.setVisibility(View.INVISIBLE);
mProgressBar.setVisibility(View.VISIBLE);
mListView.setAdapter(null);
mListView.setAdapter(mAdaptersList.get(position-1));
mProgressBar.setVisibility(View.INVISIBLE);
mListView.setVisibility(View.VISIBLE);
}

}

最佳答案

当您将 PageIndicator 与 Viewpager 结合使用时,不会调用 ViewPager 的 onPageChangeListener。我不知道这是什么原因,但这发生在我同时使用两者时。可能是因为页面指示器消耗了页面更改事件。相反,您应该为 PageIndicator 设置一个页面更改监听器,它将在页面更改时调用。您可以这样做:

indicator.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected (int page)
{
//page changed
}

@Override
public void onPageScrolled (int arg0, float arg1, int arg2)
{
}

@Override
public void onPageScrollStateChanged (int arg0)
{
}
});

我希望这会有所帮助。欢迎讨论。

关于Android ViewPager 的 onPageScrollStateChanged 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com