作者:享學課堂Alvin老師
轉載請聲明出處!
ViewPager實現無限滑動
**方案一:**將viewpager上限設置成一個很大的數,第一個頁面設置到中間。然后滑動的時候,用當前的序號與viewpager頁面數取余得到目標頁面的序號,然后顯示出來。理論上一個人不會無聊到一直左滑或者右滑。因此可以模擬無限循環。
**方案二:**假設viewpager中有四個頁面,分別為A、B、C、D。然后在A左邊添加一個頁面D,在D右邊添加一個頁面A,變成 D、A、B、C、D、A。當滑到D時跳轉到D,滑到A時跳轉到A。
第一種并不是實現了真正意義上的無限循環,但是效果比較好,頁面切換的時候也不會出現跳轉閃爍的情況。
第二種雖然是真正的無限循環,但是需要在開頭結尾添加元素,這樣就會造成其他問題,比如圖片下方跟隨圖片切換的小圓點的設置就會比較復雜。更新數據的時候也比較費勁。而且還會在切換頁面時出現閃爍,影響用戶體驗。因此選擇第一種實現方案。
第一種方案又會有兩種實現:實現A,實現B
實現A:
實現過程:直接在getItem和 getCount中修改
@Override
public Fragment getItem(int i) {return fragmentList.get(i% fragmentList.size());
}
@Override
public int getCount() {return Integer.MAX_VALUE;
}
暴露異常:出現bug
java.lang.IllegalStateException: Fragment already activeat android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:620)at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:117)
修改方案: Fragment 數量不能低于4個,給viewPager添加了一個fragment問題解決。
實現B:
同樣的,讓后再Fragment 數量是4個的基礎上繼續實現方案的另一個實現B:
@Override
public Fragment getItem(int i) {//在這里不處理position的原因是因為getItem方法在 //instantiateItem方法中調用。只要在調用前處理 //position即可,以免重復處理return fragmentList.get(i);
}
@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {position = position % fragmentList.size();return super.instantiateItem(container, position);
}
@Overridepublic int getCount() {return Integer.MAX_VALUE;
}
@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {position = position % fragmentList.size();super.destroyItem(container, position, object);
}
以上實現A和實現B均只能實現右滑的效果,無法實現無限左滑,這個是為什么呢?
解決辦法,在ViewPager配置的地方添加一行代碼:
mViewPager.setCurrentItem(fragmentList.size() * 100);
這樣就解決了不能左滑的問題,因為用戶不會死死的循環幾百次,而這個數字確實可以保證用戶左右死循環般的存在。
最后
一次偶然,從朋友那里得到一份“java高分面試指南”,里面涵蓋了25個分類的面試題以及詳細的解析:JavaOOP、Java集合/泛型、Java中的IO與NIO、Java反射、Java序列化、Java注解、多線程&并發、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、數據結構、算法、Elasticsearch 、Kafka 、微服務、Linux。
這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應該起到不小的作用,所以今天想給大家分享一下。
請注意:關于這份“java高分面試指南”,每一個方向專題(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析
這份“java高分面試指南”,每一個方向專題(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析
資料領取方式:點擊【java高分面試指南-25大專題分類】