[WEEX-342][android] The index attribute of the slider component does not work on Android.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/27e13efb Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/27e13efb Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/27e13efb Branch: refs/heads/master Commit: 27e13efb2e8f7f13a892e7a5d1e93ac011b202fb Parents: 981158f Author: jianbai.gbj <[email protected]> Authored: Fri Jun 1 10:55:08 2018 +0800 Committer: YorkShen <[email protected]> Committed: Thu Jun 7 10:57:18 2018 +0800 ---------------------------------------------------------------------- .../com/taobao/weex/ui/component/WXSlider.java | 31 ++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/27e13efb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java index cee6520..a31b56c 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java @@ -64,6 +64,8 @@ public class WXSlider extends WXVContainer<FrameLayout> { private float offsetXAccuracy = 0.1f; private int initIndex = -1; private boolean keepIndex = false; + private Runnable initRunnable; + public static class Creator implements ComponentCreator { public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException { @@ -186,8 +188,19 @@ public class WXSlider extends WXVContainer<FrameLayout> { mAdapter.addPageView(view); hackTwoItemsInfiniteScroll(); if (initIndex != -1 && mAdapter.getRealCount() > initIndex) { - mViewPager.setCurrentItem(initIndex); - initIndex = -1; + if(initRunnable == null){ + initRunnable = new Runnable() { + @Override + public void run() { + initIndex = getInitIndex(); + mViewPager.setCurrentItem(initIndex); + initIndex = -1; + initRunnable = null; + } + }; + } + mViewPager.removeCallbacks(initRunnable); + mViewPager.postDelayed(initRunnable, 50); } else { if (!keepIndex) { mViewPager.setCurrentItem(0); @@ -251,6 +264,20 @@ public class WXSlider extends WXVContainer<FrameLayout> { } + + private int getInitIndex(){ + Object index = getAttrs().get(Constants.Name.INDEX); + int select = WXUtils.getInteger(index, initIndex); + if(mAdapter == null || mAdapter.getCount() == 0){ + return 0; + } + if(select >= mAdapter.getRealCount()){ + select = select%mAdapter.getRealCount(); + } + return select; + } + + @Override protected boolean setProperty(String key, Object param) { switch (key) {
