【问题标题】:How to perform validation before new tab is selected or swiping to a new fragment with Swipe Tabs in Android?如何在选择新选项卡或在 Android 中使用 Swipe Tabs 滑动到新片段之前执行验证?
【发布时间】:2015-07-07 21:09:11
【问题描述】:

我有 4 个标签。但在允许用户使用滑动或按选项卡移动到另一个选项卡之前,我想执行与当前选项卡附加的片段相关的所有验证。 我怎样才能做到这一点?

现在 Action Bar Tab Listener 已被弃用,有哪些方法可用于执行此操作?

【问题讨论】:

    标签: android android-tabs


    【解决方案1】:

    一种方法是在您的TabsPagerAdapter 中,在您的getItemPosition 方法中。

    @Override
    public int getItemPosition(Object object) {
        if (object instanceof ValidatedFragment) {
            ((ValidatedFragment) object).validate();
        }
        return super.getItemPosition(object);
    }
    

    然后就可以为ValidateFragment定义一个接口了

    public interface ValidateFragment {
        public void validate();
    }
    

    最后,您的片段可以扩展 ValidateFragment 并实现验证:

    YouFragment implements ValidateFragment {
    ....
    @override
    public void validate(){
        //Do your validation here
    }
    ...
    
    }
    

    另一种方法是使用setUserVisibleHint 方法,每次片段可见时都会调用该方法:

     @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //Do your validation here
        }
    }
    

    编辑:
    如果您不希望用户能够在 fragment 未验证的情况下滑动,我认为您应该实现自己的 ViewPager 类,并覆盖 onInterceptTouchEventonTouchEvent 如果碎片是未验证。

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        //Validate here and return false if the user shouldn't be able to swipe
        return false;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //Validate here and return false if the user shouldn't be able to swipe
        return false;
    }
    

    另外,您可以尝试在您的Activity 中使用您的ViewPagersetOnTouchListener 方法,并在您的Action Bar Tab Listener 中添加一个类似的逻辑

    mPager.setOnTouchListener(new OnTouchListener()
    {           
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            return true;
        }
    });
    

    This SO question 将有助于实现这两个选项。

    【讨论】:

    • 感谢费德。我希望在转到其他选项卡之前对特定页面进行验证。担心第二种方法可能行不通。
    • GetitemPosition 方法 - 让用户尝试滑动或按下其他选项卡,但应在向他显示所需的片段之前进行验证。如果他没有完成验证,他不应该离开当前片段。这会有帮助吗?
    • 我添加了一个新选项供您尝试实施
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2016-06-06
    • 2016-04-22
    相关资源
    最近更新 更多