2011-04-21 51 views
2

我已修改CommonsWare的prefenceActivity应用程序,但遇到问题。使用菜单按钮启动PreferenceActivity并使用后退按钮结束

我想用菜单按钮启动prefenceActivity,然后用后退按钮结束它。

我有了这个通过菜单按钮启动我的prefenceActivity:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, EditPreferences.class)); 
    return(true); 
} 

而且它回到我的应用程序的主视图中,但还没有完成,我认为,因为当我再次按菜单按钮,prefenceActivity不会弹出。我必须关闭我的应用程序,并且只能再次运行一次。

我已经尝试完成它在我的prefenceActivity当我按下后退按钮,但这也没有帮助。

这是什么,我做错了?

感谢您的帮助!

+5

“我想用菜单按钮启动一个prefenceActivity,并用后退按钮完成它” - 为什么?你为什么要这样打破用户界面?为什么你想混淆用户,谁习惯菜单按钮提出一个菜单?用户和媒体成员憎恨那些缺乏纪律的开发者,他们没有正当的理由违反UI模式。他们在文章,博客帖子/评论等方面大声抱怨。结果,Android应用程序成为众多投诉的目标,如果您坚持这一点,您将成为其中的另一个。 – CommonsWare 2011-04-21 20:10:59

回答

3

一个快速的解决方案(虽然我不建议这)是使用

public boolean onPrepareOptionsMenu (Menu menu) 

这就是所谓的每次菜单按钮被按下时,显示的菜单右侧前。 onCreateOptionsMenu的问题是它只在第一次创建菜单之前调用。所以这并不是说活动没有完成,而是用来启动活动的方法的问题

+1

打败我吧。正确,onCreateOptionsMenu()只在第一次使用选项菜单时调用。 – Squonk 2011-04-21 18:15:07

+0

感谢您快速明确的答案。这正是我正在寻找的。 – patrick 2011-04-21 18:19:46

+5

请不要这样做。请参阅下面的答案。 – hackbod 2011-04-21 18:25:26

14

如果您只是想按下菜单按钮时执行某些操作,则应该只执行onKeyDown ()/ onKeyUp()像处理其他任何键一样处理菜单键。请务必返回true以表示您正在使用它,以便不执行默认的按键处理(通常涉及显示菜单面板)。

不要通过实现onCreateOptionsMenu()或onPrepareOptionsMenu()来做到这一点。这些是您实现与选项菜单进行交互的钩子,而不是菜单键。不能保证这些将被按下的菜单键与任何关系调用。事情经常是这样,但API中并没有定义这种说法,而且这确实是而不是这种情况。

作为一般规则,依赖于这样的副作用(哦,当用户按下菜单键时,这个API没有被记录为直接绑定到菜单键被调用)是绝对应该避免的。你的定义依赖于实现细节,这很可能会咬你。

例如在Android 3.0中有一个操作栏时onCreateOptionsMenu()在创建活动时立即调用,并且在需要更新操作栏中的操作时调用onPrepareOptionsMenu()。这是因为选项菜单现在与操作栏集成在一起。

+1

+1:Dianne知道她的东西。 – Devunwired 2011-04-21 18:32:52

+0

+1:没有想到在互动中的差异。好的解决方案 – Spidy 2011-05-09 21:48:24