拦截片段上的触摸

时间:2017-12-20 17:40:32

标签: android android-fragments

我在以前的应用程序中使用MVP,我的View组件基本上是一个RelativeLayout。

任何时候我都想阻止RelativeLayout上的任何触摸交互(例如在网络访问时),我会从touchIntercept返回true,就像这样。

public abstract class RootView<T> extends RelativeLayout implements BaseView<T> {

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (mIsScreenLocked)
            return true;
        else
            return super.onInterceptTouchEvent(ev);
    }

  @Override
public void showProgress(boolean show, boolean lockScreen) {
    ProgressBar progressBar = ((ProgressBar) findViewById(R.id.progress_bar));

    if (progressBar != null) {
        if (show) {
            progressBar.setVisibility(View.VISIBLE);
        } else {
            progressBar.setVisibility(View.GONE);
        }
    }
    mIsScreenLocked = lockScreen;
    freezeBottomBar(show);

}
}

在我的新应用程序中,我的视图是Fragments,其基础是扩展片段

public abstract class BaseFragment
{

}

我希望实现类似的功能,以便在用户启动任何网络访问时阻止片段上的所有触摸交互。

public abstract class BaseFragment
    {

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mIsScreenLocked = true;
        initializeControls();
        attachListeners();

        if (savedInstanceState == null)
            onScreenInitializationComplete(getArguments());
        else
            onScreenInitializationComplete(getArguments(), savedInstanceState);

        ***createTouchInterceptor***(view);

        //should we run ignition here?
    }

    private void createTouchInterceptor(View fragmentView) {
        fragmentView.setOnTouchListener((view, motionEvent) -> {
            if (mIsScreenLocked)
                return true;
            else
                return false;
        });

    }     
    }

这个方法不起作用,因为当片段上按下按钮时,按钮会接触到。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

从用户体验的角度来看,我不确定这是最好的想法,因为用户并不真正知道为什么他/她的行为什么都不做,但为了回答这个问题你可以

  • 使用与您在片段视图中使用顶级容器ViewGroup的RelativeLayout相同的解决方案。
  • 仅禁用setEnabled(false)&#34;可点击&#34;视图,如按钮等,像TextViews等其他视图,不需要被禁用
    • 使用叠加透明视图,该视图在根视图上完全透明,以便在片段被移除时使用事件。

但是,您可能需要考虑其他方法,例如

  • 显示阻止进度对话框
  • 仅禁用相关按钮并让用户触摸其他视图