Tôi đã mở rộng lớp ViewPager và được triển khai trênPageChangeListener. Tôi sử dụng ViewPager này kết hợp với một CirclePageIndicator bên trong một SherlockFragment. ViewPager chứa ImageViews và TextViews, không có gì lạ mắt.OnPageScrollStateChanged của Android ViewPager không bao giờ được gọi là
Tôi cần phải làm điều gì đó bên dưới ViewPager mỗi lần Trang được thay đổi. Vì vậy, tôi figured tôi cần phải sử dụng onPageScrollStateChanged và xác minh khi nhà nước là IDLE, hoặc một cái gì đó.
Vấn đề là từ 3 phương pháp được triển khai (onPageScrollStateChanged, onPageSelected và onPageScrolled), chỉ onPageScrolled được gọi (tôi đã kiểm tra với thông điệp tường trình trong mỗi phương thức). Tại sao vậy ? Mã dưới đây.
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);
}
}
Vâng, tôi nghĩ giả định của bạn là chính xác. Vâng, tôi cần phải xác minh nó, nhưng nó có ý nghĩa. Cảm ơn bạn rất nhiều vì câu trả lời hoàn hảo này! Tôi sẽ kiểm tra giải pháp vào ngày mai và báo cáo những phát hiện của tôi. –
ok Tôi sẽ chờ phản hồi của bạn .. – karn
Tuyệt vời. Nó hoạt động hoàn hảo. Cảm ơn rất nhiều ! –