我已经阅读了几篇关于使用它的帖子,但必须遗漏一些因为它不适合我.我的活动A在清单中有launchmode ="singleTop".它启动活动B,启动模式="singleInstance".活动B打开浏览器并接收和意图返回,这就是为什么它是singleInstance.我试图覆盖后退按钮,以便用户被发送回活动A,然后可以按Back返回活动,而不是再次返回活动B.
// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) onBackPressed();
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
startActivity(new Intent(this, UI.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
return;
}
Run Code Online (Sandbox Code Playgroud)
从浏览器返回后,堆栈是...... A,B,浏览器,B
我希望这段代码能够将堆栈更改为...... A ...以便再次按下后再将用户带回主屏幕.
相反,它似乎将堆栈更改为... A,B,浏览器,B,A ......好像那些标志不在那里.
我尝试在startActivity之后调用活动B中的finish(),但后面的按钮再次将我带回浏览器!
我错过了什么?谢谢!
java android android-manifest android-intent android-activity
过去,proguard是由project.properties控制的,但不再是这种情况,Android文档还没有更新.project.properties文件现在清楚地表明它是由Android Tools生成的,并且更改将被删除.我已经尝试注释了proguard.config行,但是当我编译时,它重写了project.properties,并继续使用proguard.目前禁用proguard的方法是什么?谢谢!
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt
# Project …Run Code Online (Sandbox Code Playgroud) 我已多次使用共享首选项,但由于某些原因,更改未保存在我正在测试的新应用程序中.这是重要代码的片段:
SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
widgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), widgets).commit();
Run Code Online (Sandbox Code Playgroud)
我已经使用日志来检查小部件是否已添加到集合中,但是从未保存更新的集合.如果我将最后一行更改为...
sp.edit().putStringSet(getString(R.string.key_widgets), widgets).putString("testkey", "testvalue").commit();
Run Code Online (Sandbox Code Playgroud)
...然后一切都很好.我错过了什么?
*更新:
我发现这也有效:
SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
Set<String> newWidgets = new HashSet<String>();
for (String widget : widgets) newWidgets.add(widget);
newWidgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), newWidgets).commit();
Run Code Online (Sandbox Code Playgroud)
也许我在文档中遗漏了一些关于需要为编辑器创建新对象以保存prefs的内容.
*更新2:
如果我创建一个编辑器对象没有区别:
SharePreferences.Editor spe = sp.edit();
spe.putStringSet(getString(R.string.key_widgets), widgets)
spe.commit();
Run Code Online (Sandbox Code Playgroud)