切换标签时如何获得通知(并且能够取消)

时间:2013-02-12 11:13:06

标签: android tabs navigation android-viewpager android-tabhost

背景

我有一个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);

然而,我需要的是完全不同的 - 我需要捕捉开始导航的事件,并且能够告诉它我是否允许它。

问题

我该如何解决这个问题?

如何在开始导航时收到通知,并在需要时取消?

2 个答案:

答案 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);