我最近在很多Android应用和游戏中都注意到了这种模式:当点击后退按钮"退出"应用程序时,Toast
会出现类似于"请再次单击BACK退出"的消息.
我想知道,因为我越来越频繁地看到它是一个内置的功能,你可以以某种方式访问活动?我查看了许多类的源代码,但我似乎无法找到任何相关内容.
当然,我可以考虑几种方法来轻松实现相同的功能(最容易的是在活动中保留一个布尔值,表明用户是否已经点击过一次......)但是我想知道这里是否有东西.
编辑:正如@LAS_VEGAS所说,我并不是指传统意义上的"退出".(即终止)我的意思是"回到应用程序启动活动启动之前打开的任何东西",如果这是有意义的:)
我目前有一个活动,当它显示时,通知也将显示在通知栏中.
这样,当用户按下主页并将活动推送到后台时,他们可以通过通知返回活动.
当用户按下后退按钮时,问题就出现了,我的活动被破坏但是通知仍然存在,因为我希望用户能够按下但仍然能够通过通知进入活动.但是当用户尝试这个时,我会尝试Null Pointers尝试启动一项新活动,而不是重新启动旧活动.
所以基本上我希望Back按钮的行为与Home按钮完全相同,这是我到目前为止的尝试方式:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
Run Code Online (Sandbox Code Playgroud)
但是上面的代码似乎仍然允许我的Activity被销毁,如何在按下后退按钮时阻止我的Activity被销毁?
android back-button nullpointerexception onkeypress android-activity
我有一个应用程序,在主页上我有通过应用程序导航的按钮.
在那个页面上,我有一个"EXIT"按钮,当点击它时,应该将用户带到应用程序图标所在的手机上的主屏幕.
我怎样才能做到这一点?
我要求最终用户在注销/注销后不能返回受限页面.但目前最终用户可以通过浏览器后退按钮,访问浏览器历史记录或甚至通过在浏览器的地址栏中重新输入URL来实现.
基本上,我希望最终用户在注销后不能以任何方式访问受限制的页面.我怎样才能做到最好?我可以用JavaScript禁用后退按钮吗?
这个问题类似于用户在浏览器上点击按钮时的跟踪,但不一样......我有一个解决方案,并将其发布在此处以供参考和反馈.如果有人有更好的选择,我全都耳朵!
情况是我有一个"就地编辑"的页面,一个la flickr.即有一个"点击这里添加描述"DIV,点击时变成带有保存和取消按钮的TEXTAREA.单击"保存"将数据发布到服务器以更新数据库,并将新描述放在DIV中以代替TEXTAREA.如果刷新页面,则会使用"单击以编辑"选项从数据库中显示新描述.这些天相当标准的Web 2.0.
问题是,如果:
然后显示的内容(来自浏览器的缓存)是没有包含新描述的动态修改的DIV的页面版本.
这是一个相当大的问题,因为用户认为他们的更新已丢失,并且不一定了解他们需要刷新页面才能看到更改.
因此,问题是:如何将页面标记为在加载后进行修改,然后检测用户何时"返回"并在该情况下强制刷新?
我在网上搜索了这个问题,但我一无所获:
后退按钮的逻辑是什么?当我们点击Web浏览器上的后退按钮时会发生什么?
我真的想了解更多.
谢谢.
你如何阻止Firefox和Safari缓存iframe内容?
我有一个简单的网页,其中包含iframe到不同网站上的网页.外部页面和内部页面都有HTTP响应头以防止缓存.当我单击浏览器中的"后退"按钮时,外部页面正常工作,但无论如何,浏览器总是检索iframed页面的缓存.IE工作正常,但Firefox和Safari给我带来了麻烦.
我的网页看起来像这样:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
该var
变量总是变化.尽管iframe的URL已更改(因此,浏览器应该向该页面发出新请求),但浏览器只是获取缓存的内容.
我已经检查了来回的HTTP请求和响应,我注意到即使外部页面包含<iframe src="webpage2.html?var=222" />
,浏览器仍然会获取webpage2.html?var=111
.
这是我到目前为止所尝试的:
我无法做任何JavaScript技巧,因为我被同源策略阻止了.
我的想法已经不多了.有谁知道如何阻止浏览器缓存iframed内容?
我安装了Fiddler2,因为Daniel建议再进行一次测试,不幸的是,我仍然得到了相同的结果.
这是我进行的测试:
Math.random()
在JSP中使用随机数生成.通过此测试,我能够确切地看到哪些页面正在更新,以及哪些页面被缓存.
为了快速测试,我加载页面,导航到另一个页面,然后按"返回".结果如下:
原始页面:
离开页面,然后回击:
这表明内部页面正在被缓存,即使外部页面在URL中使用不同的GET参数调用它.出于某种原因,浏览器忽略了iframe请求新URL的事实; 它只是加载旧的.
果然,Fiddler证实了同样的事情.
(我加载页面.)
外页被调用.HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
Run Code Online (Sandbox Code Playgroud)
http://ipv4.fiddler:1416/page1.aspx?var = 0.21300034290246206被调用.
(我离开页面,然后回击.)
外页被调用.HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
Run Code Online (Sandbox Code Playgroud)
http://ipv4.fiddler:1416/page1.aspx?var = 0.21300034290246206被调用.
好吧,从这个测试中,看起来好像Web浏览器没有缓存页面,但它正在缓存iframe的URL,然后在该缓存的URL上发出新请求.但是,我仍然难以理解如何解决这个问题.
有没有人对如何阻止Web浏览器缓存iframe URL有任何想法?
在单击后退按钮时遇到safari加载旧YouTube视频的问题.我已经尝试将onunload =""(这里提到防止Safari 5中的后台按钮上的缓存)添加到body标签,但在这种情况下它不起作用.
有没有办法防止某个页面上的缓存加载safari?
我遇到了一个问题,如果我使用jQuery的Get方法获取一些内容,如果我点击回来,而不是实际返回历史记录中的一个页面,它会显示Ajax查询返回的内容.
有任何想法吗?
http://www.dameallans.co.uk/preview/allanian-society/news/56/Allanian-test
在上面的页面中,如果您使用在更改页面后单击后面注释的注释列表下方的分页,它会显示用于生成注释列表的HTML内容.
我注意到它并不总是这样做,但如果你点击不同的页面几次并单击后退按钮,它只是在窗口而不是网站中显示json文本.
出于某种原因,这只会影响Chrome,因为IE和Firefox工作正常.
我正在展示非常敏感的数据.用户从我的服务器注销后,我不希望其他用户能够看到数据点击浏览器的"后退"按钮.
我怎样才能做到这一点?
back-button ×10
browser ×4
android ×3
ajax ×2
caching ×2
exit ×1
iframe ×1
java ×1
javascript ×1
jsf ×1
jsp ×1
logout ×1
onkeypress ×1
safari ×1
servlets ×1