我有一个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发送的回调事件?
我对你的应用程序的设置有点困惑。。。这是一个传统的选项卡式活动吗?每个选项卡都显示自己的活动(例如ChartActivity和EntryActivity是选项卡)?
如果是这样,您可以在TabGroupActivity中执行以下操作:
- 重写onPause()以将当前活动选项卡的索引保存在SharedPreferences中
- 重写onResume()以读取该首选项(如果存在),并切换到上次所在的选项卡
- 重写onDestroy()并删除该首选项,以便下次启动活动时在正确的选项卡中启动
如果你的活动不是这样安排的,请多解释一下事情是如何安排的。