小编piu*_*lte的帖子

你如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?

我已经阅读了几篇关于使用它的帖子,但必须遗漏一些因为它不适合我.我的活动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

76
推荐指数
5
解决办法
17万
查看次数

如何禁用proguard来构建我的Android应用程序?

过去,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)

android

18
推荐指数
4
解决办法
4万
查看次数

Android SharedPreferences没有保存

我已多次使用共享首选项,但由于某些原因,更改未保存在我正在测试的新应用程序中.这是重要代码的片段:

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)

android sharedpreferences

11
推荐指数
2
解决办法
3682
查看次数