【问题标题】:How to get notified (and able to cancel) when switching tabs切换标签时如何获得通知(并能够取消)
【发布时间】:2013-02-12 11:13:05
【问题描述】:

背景

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

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

问题

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

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

【问题讨论】:

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


    【解决方案1】:

    你应该使用 TabTabHost.OnTabChangeListener

    【讨论】:

    • 使用 TabHost.OnTabChangeListener 是一个错误的解决方案,因为它是在切换选项卡后调用的。在您尝试切换到另一个选项卡之前,需要通知我,以便我可以在需要时取消它。
    • @androiddeveloper 这听起来像是打破了通常的用户体验规则。我强烈建议您使用不同的方法来实现您的目标。
    • 我同意,但这是我的客户要求的,我告诉他这是一种奇怪的行为。但是,该片段包含一些允许将信息保存到服务器的编辑视图,因此我们需要有一些当您切换到其他选项卡时应该发生的事情。
    【解决方案2】:

    好的,我现在已经通过使用下一个代码解决了这个问题,我希望它涵盖了所有内容。

    如果有人能想到其他可能更好的解决方案,请写下来。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2012-07-10
      • 1970-01-01
      • 2018-03-26
      相关资源
      最近更新 更多