在我的 Activity 中,我根据存储的首选项更新用户界面。 updateUI代码如下:
private void updateUI()
{
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
toggle = (Button)findViewById(R.id.toggleButton);
incommingEdit = (Button)findViewById(R.id.IncommingEditButton);
outgoingEdit = (Button)findViewById(R.id.outgoingEditButton);
missedEdit = (Button)findViewById(R.id.missedEditButton);
save = (Button)findViewById(R.id.saveButton);
cancel = (Button)findViewById(R.id.cancelButton);
incommingCheck = (CheckBox)findViewById(R.id.incommingCheck);
outgoingCheck = (CheckBox)findViewById(R.id.outgoingCheck);
missedCheck = (CheckBox)findViewById(R.id.missedCheck);
incommingTextView = (TextView) findViewById(R.id.incommingTextView);
outgoingTextView = (TextView) findViewById(R.id.outgoingTextView);
missedTextView = (TextView) findViewById(R.id.missedTextView);
//Disable all the edit buttons until their checkboxes are checked.
incommingEdit.setEnabled(false);
outgoingEdit.setEnabled(false);
missedEdit.setEnabled(false);
//Display the messages in the text views.
incommingTextView.setText(preferences.getString("incommingMsgPhone", "Currently there are no messages saved."));
outgoingTextView.setText(preferences.getString("outgoingMsgPhone", "Currently there are no messages saved."));
missedTextView.setText(preferences.getString("missedMsgPhone", "Currently there are no messages saved."));
//Check the check boxes.
if(preferences.getInt("incommingPhone", 0) == Calls.INCOMING_TYPE)
{
incommingCheck.setChecked(true);
incommingEdit.setEnabled(true);
}
if(preferences.getInt("outgoingPhone", 0) == Calls.OUTGOING_TYPE)
{
outgoingCheck.setChecked(true);
outgoingEdit.setEnabled(true);
}
if(preferences.getInt("missedPhone", 0) == Calls.MISSED_TYPE)
{
missedCheck.setChecked(true);
missedEdit.setEnabled(true);
}
//Check if the application is on or off and set the text of the button.
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
boolean on = preferences.getBoolean("isOn", false);
if(!on)
toggle.setText("Turn On");
else
toggle.setText("Turn off");
}
以下是我保存所有这些首选项的方式:
save.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//Save all in the preference file and exit.
//preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putInt("incommingPhone", incomming);
editor.putInt("outgoingPhone", outgoing);
editor.putInt("missedPhone", missed);
editor.putString("incommingMsgPhone", incommingMsg);
editor.putString("outgoingMsgPhone", outgoingMsg);
editor.putString("missedMsgPhone", missedMsg);
editor.commit();
finish();
}
});
我的 UI 在我第二次运行我的应用程序时正确更新,但大约第三或第四次我获得默认首选项值。我什至尝试使用 getdefaultpreferences 而不是 getsharedpreferences,但没有成功。
最佳答案
我在 getStringSet 上遇到了类似的问题,文档在那里提供了帮助
Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all.
关于android - 共享首选项未保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407854/
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
在许多ruby类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..
是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立
这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","
多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor