我有一个Preference活动,它使用我的XML文件定义的List Preferences.如何将列表活动的摘要设置为所选的值?
谢谢!
我如何检查以确保我的变量是int,array,double等...?
编辑:例如,我如何检查变量是否为数组?这有什么功能吗?
SharedPreferences有方法getAll,但它不返回任何条目,尽管存在一些键:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
Run Code Online (Sandbox Code Playgroud)
返回true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
Run Code Online (Sandbox Code Playgroud)
返回空地图
怎么了?如何获取所有共享首选项的列表?
Android新手,我在用户更改首选项时有一些代码我将UI首选项中的"摘要"字段更新为他们输入的值.但是,在创建首选项活动时,我想将"摘要"字段设置为相应首选项中的值.请指教.谢谢.
public class MyPreferenceActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
sp.registerOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Preference pref = findPreference(key);
if (pref instanceof EditTextPreference) {
EditTextPreference etp = (EditTextPreference) pref;
pref.setSummary(etp.getText());
}
}
}
Run Code Online (Sandbox Code Playgroud) 我曾经PreferenceActivity在我的Android应用程序中有偏好.我想要一个偏好说"pref 2"在其他偏好说"pref 1"未被选中时被启用,而"pref 2"在被选中"pref 1"时被禁用.即恰好与android:dependancy属性相反.
我怎样才能做到这一点?
我是Java Android开发的初学者.我正在使用Eclipse SDK 3.6.1版本.我有一个带有两个复选框和一个后退按钮的首选项窗口.
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="PIN requirement">
<CheckBoxPreference
android:title="Use PIN"
android:defaultValue="true"
android:key="checkboxPref" />
<CheckBoxPreference
android:title="Don't use PIN"
android:defaultValue="false"
android:key="checkboxPref2" />
</PreferenceCategory>
<PreferenceCategory>
<Preference
android:title="Back"
android:key="customPref" />
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
如何将两个CheckBox更改为RadioButton组?
我正在学习如何在Android中开发并想要进行设置活动,
我的设置活动
public class Main extends Activity {
protected SettingsFragment settingsFragment;
@SuppressLint("NewApi")
@TargetApi(11)
public class SettingsFragment extends PreferenceFragment implements
SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
setSummaries();
}
@Override
public void onResume() {
final SharedPreferences sh = getPreferenceManager().getSharedPreferences() ;
super.onResume();
sh.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
final SharedPreferences sh = getPreferenceManager().getSharedPreferences() ;
super.onPause();
sh.unregisterOnSharedPreferenceChangeListener(this);
}
@SuppressLint("NewApi")
public void setSummaries(){
final SharedPreferences sh = getPreferenceManager().getSharedPreferences() ;
//Pref1
Preference stylePref = findPreference("editTextPref");
stylePref.setSummary(sh.getString("editTextPref", ""));
//here the other preferences.. …Run Code Online (Sandbox Code Playgroud) 如何将ListPreference的摘要修改为用户选择的新"Entry"字符串(而不是条目值)
我用setOnPreferenceChangeListener()来支持它
new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
using((ListPreference)preference).getEntry()我得到旧值(因为它还没有更改),newValue.toString()返回条目值(不是显示给用户的条目文本)
我该怎么做?提前致谢
我有一个PreferenceActivity2级树的PreferenceScreens,类似于:
<PreferenceScreen>
<PreferenceScreen android:key="A">
<ListPreference/>
<EditTextPreference/>
</PreferenceScreen>
<PreferenceScreen android:key="B">
<ListPreference/>
<EditTextPreference/>
</PreferenceScreen>
...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
每个较低级别的偏好屏幕,例如A和B,正在收集两个相关的数据.我希望这些父项的摘要是两个子首选项的当前值的组合.
我尝试在叶子首选项上添加onPreferenceChangeListener并从那里更新摘要,但似乎没有.首选项都是在活动中以编程方式创建的,所以我在onCreate中做了类似的事情:
leafListPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// do some work
prefScreenA.setSummary( /* get new summary based on newValue */);
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
然后我试图找到一个位置,我可以通知我已经从子页面返回到顶级首选项屏幕,以便我可以在此时更新.但是,我对如何显示下级屏幕感到困惑.看起来它们实际上是对话框,而不是完整的活动,因为onPause/onResume在它们之间移动时不会被调用.在返回顶级页面时,是否有一些我遗漏的方法会被调用?
我也尝试添加一个sharedPreferenceChangeListener,如所描述这里,但似乎从来没有被调用.
任何人都对我在这里缺少的东西有任何暗示,或者我错过的任何更简单的方法?
我知道我可以这样做:
Preference pref = findPreference(getString(R.string.pref_vibrate_on_key));
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
LogUtil.d("Working!");
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
但我想为每个偏好添加一个Listener.我试过做:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
LogUtil.d("working!");
}
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用.这可能吗?如果是这样,我做错了什么?
我可以使用默认摘要显示EditTextPreference.现在我想更新它,当我在编辑文本框中输入新值并单击确定然后它应该更新摘要的值.但我无法做到这一点.我的代码如下,请在我的代码中更新所需.
public class Prefs extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
final EditTextPreference pref = (EditTextPreference)findPreference("username");
pref.setSummary(pref.getText());
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
final EditTextPreference pref = (EditTextPreference)findPreference("username");
pref.setSummary(pref.getText());
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
xml文件是
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:title="User Name"
android:key="username"
android:summary="Please provide user name" />
<EditTextPreference
android:title="Password"
android:password="true"
android:key="password"
android:summary="Please enter your password" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
实际上我的代码更新了以前的输入值作为摘要文本 单击"确定"按钮时如何将文本显示为摘要.谢谢
当我在用户选择首选项时尝试设置摘要时,通常会保存.但是当我的应用程序重新启动时,摘要就消失了.
这里是我的代码来设置摘要ListPreference和EditTextPreference:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
Preference pref = findPreference(key);
// I feel the problem is happened here
if (pref instanceof ListPreference) {
ListPreference listPref = (ListPreference) pref;
pref.setSummary(listPref.getEntry());
}
// Same problem here
if (pref instanceof EditTextPreference) {
EditTextPreference editText = (EditTextPreference) pref;
pref.setSummary(editText.getEntry().toString());
}
}
Run Code Online (Sandbox Code Playgroud)
有什么不对?