我正在做一个相当基本的游戏.在我的偏好中,可以选择更改难度设置.我希望能够以某种方式,在调用它的主要活动中,感觉他们是否已经改变了难度.(然后重启游戏)
由于异步处理偏好活动的方式,我遇到了困难.如果我在将意图发送到PreferenceActivity之前和之后添加逻辑来检查值(从菜单选择中),它确实不起作用......
有人能指出我如何序列化通常异步处理的一大块代码,或者知道如何改变偏好的想法?某个地方是否隐藏了一个监听器类?
为了后人的缘故,这里是处理意图的代码以及我如何失败.(片段,从内部菜单onOptionsItemSelected,在开关内)
case R.id.menuOptions:
String currentDifficulty = preferences.getString("difficulty","problem!");
Intent i = new Intent(this, prefs.class);
startActivity(i);
if (currentDifficulty.equals(preferences.getString("difficulty","problem!")))
return true;
else doNewGame();
return true;
Run Code Online (Sandbox Code Playgroud) 请点击查看图片 http://i1094.photobucket.com/albums/i455/tdounnyy/device.png
在此PreferenceActivity的底部,"选择铃声"右侧有一个图标/按钮.
并且"振动"没有.
此振动偏好是一个客户偏好扩展偏好.
我想在Vibrate行中放置相同的Icon.一种方法是扩展ListPreference或RingtonePreference来欺骗操作系统.
我不喜欢这样,想知道是否有更好的解决方案.^ _ ^
preferences.xml感谢@Femi
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific …Run Code Online (Sandbox Code Playgroud) 我给了android:singleLine="true"选项EditTextPreference,当对话框中的编辑框有焦点时,软件键盘显示"完成"按钮代替Enter键.但是,如果我按下完成按钮,只有软键盘关闭,我仍然需要单击对话框上的完成按钮.
无论如何在软件键盘上输入key和ime动作键来关闭对话框并应用新值?
我正在使用标头构建首选项活动.在文档中,我看到extra可以为每个header条目指定参数.在代码中,我想在设置活动中构建标题列表时访问这些额外的值,如下所示.请注意,我是从重载onBuildHeaders而不是标题片段的活动中完成的.
if (header.extras != null && header.extras.containsKey("someKey")) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,extras参数始终为null.有没有办法强制它被读入?
我想做一个普通的PreferenceActivity(旧样式,没有标题),但是使用片段而不使用addPreferencesFromResource(id)(因为弃用).
现在我把它放在我的onCreate:
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
Run Code Online (Sandbox Code Playgroud)
我PreferencesFragment看起来像这样:
public static class PreferencesFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Run Code Online (Sandbox Code Playgroud)
显然我也实现了这个isValidFragment方法:
@Override
protected boolean isValidFragment(String fragmentName) {
return PreferencesFragment.class.getName().equals(fragmentName)
|| InnerFragment.class.getName().equals(fragmentName);
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.然而,当PreferenceScreen我在我的内心时有一个问题preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ... -->
<PreferenceScreen android:fragment="net.chaozspike.batterynotifier.SettingsActivity$InnerFragment"
android:summary="@string/settings_activity_prefs_display_night_mode_sum"
android:title="@string/settings_activity_prefs_display_night_mode" />
<!-- ... -->
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我有以下问题:新的首选项屏幕显示在正常的屏幕之上,我知道这可能是因为我更换了默认设置R.id.content.截图:

但是我想在不使用已弃用的东西或标题的情况下解决此问题.这有可能实现吗?
android preferenceactivity preferencescreen preferencefragment
我正在尝试使用DropDownPreference构建首选项屏幕。最初我在我的 gradle 文件中使用以下内容,但当我注意到 DropDownPreference 包含在 v7 而不是 v14 中时compile 'com.android.support:preference-v14:25.3.1'切换到(我认为 v14 也可能包含 v7 中的所有内容,但我猜不是?)。compile 'com.android.support:preference-v7:25.3.1'我的 XML 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/pref_title"
android:layout_height="match_parent"
android:layout_width="match_parent">
<PreferenceCategory
android:key="pref_video"
android:title="@string/pref_video_title">
<android.support.v7.preference.DropDownPreference
android:key="pref_video_quality"
android:title="@string/pref_video_quality"
android:summary="@string/pref_summary_video_quality"
android:entries="@array/pref_entries_video_quality"
android:entryValues="@array/pref_entries_video_quality" />
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我也刚刚尝试过DropDownPreference作为标签。似乎什么都不起作用。我总是得到一个Error inflating class DropDownPreference当我尝试进入应用程序中的首选项屏幕时,
知道如何使用这个 DropDownPreference 吗?谢谢!
编辑:添加错误消息:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.int_a.giantbombforandroid/com.app.int_a.giantbombforandroid.main.SettingsActivity}: java.lang.ClassCastException: android.support.v7.preference.DropDownPreference cannot be cast to android.preference.Preference
Run Code Online (Sandbox Code Playgroud)
编辑:AndroidManifest.xml 中的 SettingsActivity 声明
<activity android:name=".main.SettingsActivity"
android:configChanges="orientation|screenSize"
android:theme="@style/PreferenceThemeOverlay.v14.Material">
</activity>
Run Code Online (Sandbox Code Playgroud) 您好我需要知道如何在Android中使用GPS监听以下内容,以便我可以更新UI中的UI PreferenceActivity.我没有尝试GpsStatus.Listener任何事情.
GpsStatus.GPS_EVENT_STARTEDGpsStatus.GPS_EVENT_STOPPED任何建议都会很棒.
如何创建设置屏幕?我应该使用PreferenceActivity还是 PreferenceFragment?
注意 -文档没有帮助
我已经尝试过的:
我想要的是使用PreferenceFragment的简单实现