Android:在Intent.ACTION_VIEW中覆盖onKeyUp和onKeyDown

时间:2012-01-21 09:22:31

标签: android android-intent back-button tabactivity activitygroup

我有一个Android选项卡式应用程序,可显示音乐图表(例如ChartActivity),每个应用程序依次显示音乐曲调列表(例如,EntryActivity)。点击每个音乐曲调条目将启动,例如,YouTube应用程序(默认动作)。也就是说,在EntryActivity的list.setOnItemClickListener中,我进行了调用:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(selectedSongUrl));
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("YouTube", intent);

(是的,我使用ActivityGroup和TabActivity。)

问题在于,当我从YouTube屏幕选中后退按钮时,活动视图不会返回到EntryActivity,而是返回ChartActivity。我想,这是因为我无法覆盖YouTube屏幕上的onKeyUp和onKeyDown,以便我可以进一步将事件传递给父活动:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

// Overrides the default implementation for KeyEvent.KEYCODE_BACK 
// so that all systems call onBackPressed().
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        TabGroupActivity parentActivity = (TabGroupActivity)getParent();
        parentActivity.onBackPressed();
        return true;
    }
    return super.onKeyUp(keyCode, event);
} 

有没有办法让EntryActivity知道从Intent.ACTION_VIEW发送的回调事件?

1 个答案:

答案 0 :(得分:0)

我对你的应用程序的设置感到有点困惑......这是一个传统的标签式活动,每个标签显示自己的活动(例如ChartActivity和EntryActivity是标签)?

如果是这样,您可以在TabGroupActivity中执行以下操作:

  1. 覆盖onPause()以保存SharedPreferences中当前活动选项卡的索引。
  2. 覆盖onResume()以读入该首选项(如果存在)并切换到您上次使用的选项卡。
  3. 覆盖onDestroy()并删除该首选项,以便下次启动活动时从正确的标签中开始。
  4. 如果不是您的活动设置方式,请详细说明设置方式。