0

背景

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

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

问题

我应该如何解决这个问题?

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

4

2 回答 2

1

您应该使用 Tab TabHost.OnTabChangeListener

于 2013-02-12T11:15:18.523 回答
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);
于 2013-02-12T12:13:37.753 回答