我如何获得控制你的电话和报文统计信息从一个PreferenceActivity在。
-
26-09-2019 - |
题
我使用一个PreferenceActivity显示出一些设置为我应用程序。我膨胀的设置通过xml文件,以便我onCreate(并完成类方法)看起来是这样的:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
对如果是的话,为什么不试的 PreferenceActivity PreferenceFragment 国
这些优先选择将自动保存,以控制你的电话和报文统计信息的用户相互作用。检索的一个实例,控制你的电话和报文统计信息的优先层次在这一活动将使用,呼getDefaultSharedPreferences(序。内容。下文),与上下文中相同的软件包作为这项活动。
但是我怎么得到的名称SharedPreference在另一个活动吗?我只能呼叫
getSharedPreferences(name, mode)
在其他活动的但是我需要的名称SharedPreference这是所使用的PreferenceActivity.的名称是什么,或如何我可以找回它?
解决方案
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
更新
根据 共同的偏好|安卓开发教程(第13) 通过西蓝波M N,
许多应用程序可提供一种方式来捕捉户上的首选项 设置一个具体的应用程序或活动。为支持 这样,安卓提供了一套简单的Api。
首都名称通常价值对。他们可以储存为 "共有的偏好"跨越各种活动中的应用程序(注意 目前,它无法共享跨过程)。或者也可以 一些需要加以储存的具体活动。
共同喜好:共享的偏好可以使用的所有组成部分(活动、服务等)的应用程序。
活动处理的偏好:这些偏好只能用于在特定活动和不能用于其他部件的应用程序。
共同喜好:
共享的偏好管理的帮助 getSharedPreferences
方法 Context
类。首都储存在一种默认文件 (1) 或者你可以指定的文件名 (2) 是用来参考的偏好。
(1) 建议的方式 是使用的默认方式,不指定的文件名
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2)在这里是你是怎么得到的实例时,指定的文件名
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
是的操作方式的偏好。它是默认的方式和手段的创建文件将访问仅通过调用的应用程序。其他两个模式支持的 MODE_WORLD_READABLE
和 MODE_WORLD_WRITEABLE
.在 MODE_WORLD_READABLE
其他应用程序可以读取的创建文件但不能修改它。在情况下 MODE_WORLD_WRITEABLE
其他应用程序也已经写入权限的创建文件。
最后,一旦你有偏好的实例,这是可以如何 检索的储存价值 从偏好:
int storedPreference = preferences.getInt("storedInt", 0);
要 储存价值 在偏好文件 SharedPreference.Editor
对象具有使用。 Editor
是一种嵌套的接口 SharedPreference
类。
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
编辑也支持的方法一样 remove()
和 clear()
删除偏好值的文件。
活动:
共享的偏好可以使用的其他程序组成。但是,如果你不需要分享喜好与其他部件,并希望有活动的私人喜好,你可以那样做有帮助的 getPreferences()
方法的活动。的 getPreference
方法的使用 getSharedPreferences()
方法与活动的名称类优先文件的名称。
以下是代码,以获得的喜好
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
代码存储值也是同样情况下共享的偏好。
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
你也可以使用其他方法,如储存的活动状态的数据库。注意到安卓还包含一个包裹叫 android.preference
.包定义类应用来实现的偏好的用户界面。
看到一些更多的例子检查的 数据储存 员额在开发网站。
其他提示
如果您没有访问getDefaultSharedPreferenes()
,您可以使用getSharedPreferences(name, mode)
相反,你只需要在正确的名称来传递。
Android的创建这个名称(可能基于项目的包叫什么名字?)。您可以通过将在SettingsActivity
onCreate()
下面的代码,看到preferencesName
是什么得到它。
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
的字符串应该是这样com.example.projectname_preferences
。硬代码,在某处你的项目,并把它传递到getSharedPreferences()
,你应该是好去。
第一声明这些方法..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
然后,当你想要把一个PREF称之为:
putPref("myKey", "mystring", getApplicationContext());
当你想获得一个PREF称之为:
getPref("myKey", getApplicationContext());
或强>可以使用该对象 HTTPS: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo 这进一步简化了一切
示例:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
不必通过上下文到处是真的讨厌我。该代码变得太冗长和难以管理。我这样做的每一个项目,而不是...
public class global {
public static Activity globalContext = null;
和设置在主活动创建
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
也是所有首选项键是独立于语言,我震惊了,没有人提到。
getText(R.string.yourPrefKeyName).toString()
现在请很简单地像这样在一个代码行
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
如果你有一个复选框,你想在任何Java文件以获取它的值,即真/假 -
使用 -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
<强>已更新2019 强>
可以简单地使用PowerPreference
文库
https://github.com/AliEsaAssadi/Android-Power-Preference
获取共享偏好实例
要得到你只需要调用默认实例
PowerPreference.getDefaultFile()
或者,如果你想有一个特定的偏好设置文件
PowerPreference.getFileByName(fileName)
书写数据:
PowerPreference.getDefaultFile().put(key,value)
获取数据
PowerPreference.getDefaultFile().getString(key,value)