我有一个viewPager和一个tabHost,用于在页面之间导航。
在某些情况下,viewPager中的片段会禁止导航,甚至会显示一个对话框,要求用户验证片段中所做的更改是否会被取消。
如果用户确认,我会允许导航,如果没有,我会禁止导航。
我需要在用户尝试导航到另一个标签时收到通知,并且(在我创建的某些条件下)禁止/允许它。
我发现的唯一功能是如何禁用切换。
对于viewPager,我使用:
mViewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
return !mIsTabsSwitchingEnabled;
}
});
对于tabHost,我使用:
mTabHost.getTabWidget().setEnabled(mIsTabsSwitchingEnabled);
然而,我需要的是完全不同的 - 我需要捕捉开始导航的事件,并且能够告诉它我是否允许它。
我该如何解决这个问题?
如何在开始导航时收到通知,并在需要时取消?
答案 0 :(得分:1)
您应该使用标签TabHost.OnTabChangeListener
答案 1 :(得分:0)
如果有人能想到可能更好的其他解决方案,请写下来。
final OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
return isCurrentFragmentNeedTabSwitchingBlocking();
}
};
mViewPager.setOnTouchListener(onTouchListener);
for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); ++i)
mTabHost.getTabWidget().getChildAt(i).setOnTouchListener(tabOnTouchListener);