我在以前的应用程序中使用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;
});
}
}
这个方法不起作用,因为当片段上按下按钮时,按钮会接触到。
有什么想法吗?
答案 0 :(得分:0)
从用户体验的角度来看,我不确定这是最好的想法,因为用户并不真正知道为什么他/她的行为什么都不做,但为了回答这个问题你可以
RelativeLayout
相同的解决方案。setEnabled(false)
&#34;可点击&#34;视图,如按钮等,像TextViews等其他视图,不需要被禁用
但是,您可能需要考虑其他方法,例如