【问题标题】:ActivityGroup not handling back key for ListActivityActivityGroup 不处理 ListActivity 的返回键
【发布时间】:2010-09-29 15:10:40
【问题描述】:

我正在使用 ActivityGroup 生成多个活动并在 TabActivity 的同一选项卡内切换视图。

当我按下返回键时,这个方法在我的 ActivityGroup 中被调用

public void back() {  
        if(history.size() > 0) {  
            history.remove(history.size()-1);
            if (history.size() > 0)
             setContentView(history.get(history.size()-1)); 
            else
              initView();
        }else {  
            finish();  
        }  
    }  

此方法允许我保留一堆我的活动,并在按下返回键时返回上一个活动。

这在我所有的嵌套活动上都运行良好,除了 ListActivity,按下后退键会简单地退出应用程序。

【问题讨论】:

  • 能否提供ActivityGroup的代码?

标签: android android-activity lifecycle


【解决方案1】:

在 ActivityGroup 中,当 ListActivity 聚焦时,ActivityGroup 的 onKeyDown() 没有被调用,只有子 (ListActivity) 的 onKeyDown() 被调用 为了确保ActivityGroup的onKeyDown()被调用,我们需要从ListActivity的onKeyDown()中返回false。完成此更改后,我能够接收关键事件

【讨论】:

    【解决方案2】:

    我知道你的意思...几周前我遇到了这个问题。我也知道这是一个令人讨厌的错误,我已经吸取了教训:我永远不会使用这种方法!所以,基本上,为了解决这个问题,你必须对你的代码做一些变通方法。例如,我通过将以下代码添加到活动中的一项活动来解决该问题:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && StatsGroupActivity.self != null) {
            StatsGroupActivity.self.popView();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    

    请注意,我的 ActivityGroup 被称为 StatsGroupActivity,看起来像:

    public class StatsGroupActivity extends GroupActivity{
    
        /**
         * Self reference to this group activity
         */
        public static StatsGroupActivity self;
    
        public void onCreate(Bundle icicle){
            super.onCreate(icicle);
            self = this;
            // more stuff
        }
    }
    

    【讨论】:

    • 我实现了这个解决方法,它成功了。当 Activity 是 ListActivity 时,ActivityGroup 中的 onBackPressed() 方法不会被调用......
    【解决方案3】:

    @克里斯蒂安

    我使用的是普通的 Activity 而不是 ListActivity,但是填充了 ListView 时,它给了我同样的问题。

    我只在我的 Activity 上实现了 onBackPressed 而不是 onKeyDown 来回调 MyActivityGroup 调用的同一个 back() 函数。

    @Override  
    public void onBackPressed() {
        MyActivityGroup.group.back();  
        return;  
    }
    

    group 是 MyActivityGroup 中的一个静态字段。

    public static MyActivityGroup group; 
    

    back() 函数将与提供的 yann.debonnel 相同。

    我不知道这是否与您的 ListActivity 相同,没有测试它。但就我而言,它奏效了。

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多