我想我需要在onStop
方法中添加一些代码。它适用于仅在活动为finished()
但是当用户将一些linkify
d文字关注到网络浏览器时,或者当用户按下主屏幕时,都会调用onStop()
,但这些都不会结束活动,我不喜欢我想在用户关注链接时结束活动,因此我无法将finish()
放在onStop()
中,除非我能在onStop()
内检测并区分这种情况
有没有办法可以覆盖Linkify()
以便我可以在其中添加一个标记,或者让它运行startActivityforResult()
以便我可以在结果中返回信息?
类似地,当用户按下主页按钮时,有没有办法可以将活动设置为finish()
?
由于
答案 0 :(得分:1)
您是否可以检查onStop()
中的isFinishing()
,以决定是否需要运行与服务相关的代码?
@Override
protected void onStop() {
super.onStop();
if (isFinishing()) {
// Your service-related code here that should only run if finish()
// was called.
}
}
更新:(在更好地理解问题后)
与another question上建议的方法非常相似,您可以覆盖startActivity()
以在链接启动时拦截,并设置您的标记(如果是这种情况)。
@Override
public void startActivity(Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_VIEW)) {
// maybe also check if getScheme() is 'http' then set our flag
persist.saveToPrefs("linkifyClick", true);
}
// proceed with normal handling by the framework
super.startActivity(intent);
}
如果您愿意,其他答案也会显示如何调用startActivityForResult()
。
答案 1 :(得分:0)
解决方案(仍然存在问题)
我在xml
中的textView上添加了onClick:
属性
<TextView
android:id="@+id/body"
android:paddingTop="10dp"
android:onClick="onTextViewClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
然后在该新方法中的共享偏好中保存了一个标记
public void onTextViewClick(View v){
//write to sharedpreferences
persist.saveToPrefs("linkifyClick", true);
}
然后在我的onStop中,我可以检测是否设置了该标志!
@Override
public void onStop(){
super.onStop();
if(persist.getFromPrefs("linkifyClick", false) == false)
{
finish();
}
else
persist.saveToPrefs("linkifyClick", false); //if it was true, then set to false
}
问题
可以在不触及实际链接部分的情况下单击链接的文本。这会将标志设置为true
,并且仍会混淆我的生命周期。所以我需要能够检测何时按下主页按钮
更新:这有助于澄清另一张海报的问题(接受了答案),该人更新了答案,我把它放入我的代码后就接受了。它有效。