【问题标题】:onResume() isn't triggering on TabHost items switchingonResume() 不会触发 TabHost 项目切换
【发布时间】:2011-04-11 12:54:37
【问题描述】:

我有一个TabHost,里面有两个tabs。第一次切换到第二个tab 时,调用了第二个tab's activityonResume() 方法。然后我显示了一个AlertDialog,它消失后没有调用'onResume()'方法,但我真的在等待它。我假设调用“AlertDialog”会触发“onPause()”方法,并且应该在“Activity”实际显示并准备好与用户交互之前调用“onResume()”。但是当我切换回第一个tab 是另一个activity 时,不会调用'onPause()'。

您能否告知为什么不调用“onPause()”和“onResume()”方法以及在显示“AlertDialog”或在tabs 之间切换后调用了哪些方法?

【问题讨论】:

    标签: android android-tabhost


    【解决方案1】:

    当您创建一个 TabHost 来保存活动时,其中的子级无法管理自己的生命周期方法(onResume、onPause、onCreated 等),而父级(持有者)必须完成所有管理。我已经通过覆盖持有者(定义 tabhost 的 Activity)中的 onPause 和 onResume 来实现此行为,如下所示:

    @Override
    public void onPause() {
        super.onPause();
        try {
            mlam.dispatchPause(isFinishing());
        } catch (Exception e) {}
    }
    
    @Override
    public void onResume() {
        super.onResume();
        try {
            mlam.dispatchResume();
        } catch (Exception e) {}
    }
    

    其中“mlam”是 LocalActivityManager 实例。有了它,我认为你的 onResume/onPause 方法会被触发。希望这对您有所帮助。

    【讨论】:

    • 而且,LocalActivityManager mlam = new LocalActivityManager(ParentActivity.this, false); mlam.dispatchCreate(savedInstanceState); yourTabHost.setup(mlam);无论如何,很好的答案 mthama
    【解决方案2】:

    @mthama 的回答工作得非常好,并且已将 LocalActivityManager 声明为 Tabhost 级别的局部变量。但是,如果我只想触发特定选项卡上的 onResume() 之一,我会执行以下操作。

    protected void onResume() {
         super.onResume();       
         try {
             if(mLocalActivityManager != null){
                 TabActivityOne tabActivity1 = (TabActivityOne) mLocalActivityManager.getActivity("tabId1");
                 if(tabActivity1 != null){
                     tabActivity1.onResume();
                 }  
             }           
        } catch (Exception e) {
    
        }               
    }
    

    【讨论】:

    • 对于留下负面评价的人,我会欢迎反馈为什么它不起作用。
    【解决方案3】:

    我认为调用“AlertDialog”会触发“onPause()”方法,并且应该在“Activity”实际显示并准备好与用户交互之前调用“onResume()”

    AlertDialog 不会影响 Activity 的生命周期。

    Check out the Activity's Life Cycle Flow Chart Here.

    在选项卡之间切换时,如果你想要一个回调方法为什么不使用TabChanged Listener

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,我试试这个,效果很好~~

      private OnTabChangeListener TabChangeListener = new OnTabChangeListener() {
      
          @Override
          public void onTabChanged(String tabId) {
              if (tabId.equals("download")){
                  mlocalActivityManager.dispatchPause(isFinishing());
                  mlocalActivityManager.dispatchResume();
                  tabs.setCurrentTab(1);
              }
          }
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 2014-07-02
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        相关资源
        最近更新 更多