首先,我想简要描述一下我的情况.
我有两个类,一个MainClass和一个DataBaseHelper类,它们扩展了SQLiteOpenHelper.
在我的MainClass中,我调用DataBaseHelper类中的方法来打开数据库.在打开数据库之前,我想检查用户数据库版本(一旦我想更新数据库并将其推送到Android市场,这一点很重要).所以从DataBaseHelper类我调用以下方法,它在MainClass中.
public int checkCurrentDbVersion(){
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
return dbUpgradeVar;
}
Run Code Online (Sandbox Code Playgroud)
我从DataBaseHelper类调用checkCurrentDbVersion()方法,如下所示:
MainClass currentDbVersion = new MainClass();
int oldDbVersion = currentDbVersion.checkCurrentDbVersion();
Run Code Online (Sandbox Code Playgroud)
一旦调试器运行以下行,它就会停止.
SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我没有定义构造函数.这可能是失败吗?
最好的问候Johe
我创建了一个PreferenceActivity.一些偏好是纯粹的信息.我希望它们有点变灰,所以很明显点击它们不应该做任何事情.
我怎么做?
我想为我创建的动态壁纸添加设置.我遗漏了一些关于SharedPreferences如何工作的基本信息.代码和XML基于多维数据集动态壁纸示例,我无法弄清楚我做错了什么.我的问题是当我从列表中选择我的动态壁纸时,没有"设置"按钮出现.仅显示"设置壁纸"按钮.我怀疑我搞砸了XML中的一些东西.
这是一个非常简单的动态壁纸,我只是为了愚弄设置.它只是将背景设置为蓝色或绿色(并且该部分有效).
我认为相关的代码和xml如下:
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.BGWallpaper"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<uses-feature android:name="android.software.live_wallpaper" />
<application
android:icon="@drawable/icon" android:label="@string/AppName">
<service
android:icon="@drawable/icon"
android:label="@string/AppName"
android:name="com.android.BGWallpaper.BlueGreen"
android:permission="android.permission.BIND_WALLPAPER" android:debuggable="false">
<intent-filter android:priority="1">
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data android:name="android.service.wallpaper" android:resource="@xml/bg" />
</service>
<activity
android:label="BGSettings"
android:name="com.android.BGWallpaper.BGPrefs"
android:theme="@android:style/Theme.Light.WallpaperSettings"
android:exported="true">
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
的preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Title Preference"
android:key="BGSettings">
<ListPreference
android:key="background"
android:title="Background Title"
android:summary="Background Summary"
android:entries="@array/BackgroundChoices"
android:entryValues="@array/BackgroundChoices" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
bg.xml
<?xml version="1.0" encoding="utf-8"?>
<wallpaper
xmlns:android="http://schemas.android.com/apk/res/android"
android:thumbnail="@drawable/icon"/>
Run Code Online (Sandbox Code Playgroud)
BlueGreen.java(壁纸服务)
public class BlueGreen extends WallpaperService
{
public …Run Code Online (Sandbox Code Playgroud) 当应用程序第一次启动时,我想通过使用'android:defaultValue'属性存储我在prefences.xml中定义的所有默认值,但其中一些不存储在设备上 - 有人可以告诉我为什么?
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<PreferenceCategory android:title="@string/prefs_cat_title_x">
<ListPreference
android:key="@string/prefs_key_1"
android:title="@string/prefs_title_1"
android:summary="@string/prefs_summary_1"
android:entries="@array/array1"
android:entryValues="@array/array1"
android:defaultValue="@string/prefs_default_1"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_2"
android:title="@string/prefs_title_2"
android:defaultValue="@string/prefs_default_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_3"
android:title="@string/prefs_title_3"
android:defaultValue="@string/prefs_default_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ListPreference
android:key="@string/prefs_key_4"
android:title="@string/prefs_title_4"
android:summary="@string/prefs_summary_4"
android:entries="@array/array2"
android:entryValues="@array/array2"
android:defaultValue="@string/prefs_default_4"/>
<CheckBoxPreference
android:key="@string/prefs_key_5"
android:title="@string/prefs_title_5"
android:summary="@string/prefs_summary_5"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="@string/prefs_key_6"
android:title="@string/prefs_title_6"
android:summary="@string/prefs_summary_6"
android:defaultValue="false"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_cat_title_common">
<com.myapp.DatabaseResetPreference
android:title="@string/prefs_title_7"
android:summary="@string/prefs_summary_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)
android store default-value android-preferences sharedpreferences
我看到了一些自动登录的教程例如这个链接,但是当我第一次使用该应用程序时,如何检查登录名和密码是否已经插入到"首选项活动"中?我应该放什么条件?
我需要在GoogleTV中使用D-PAD处理PreferenceFragment导航.为此,我需要访问PreferenceFragment的ListView(第一个和最后一个元素).
在下面的代码中,我能够访问列表视图的子项,但它是空的.然而,如果我调试我可以看到12个孩子被创建,但他们是null因此计数返回为'0'
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
//Log.d(DEBUG_TAG, "onCreateView");
View v = inflater.inflate(R.layout.settings_tile, null);
closeBtn = (ImageView) v.findViewById(R.id.settingsCloseButton);
ListView lv = (ListView) v.findViewById(android.R.id.list);
lv.getChildCount();
return v;
}
Run Code Online (Sandbox Code Playgroud)
下面是PreferenceScreen的xml ...注意它是Pref屏幕中的Pref屏幕:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="main_pref">
<PreferenceCategory
android:title="@string/units">
<ListPreference
android:key="pref_unit_temp"
android:title="@string/temperature"
android:defaultValue="@string/default_metric"
android:entries="@array/pref_temp_units"
android:entryValues="@array/pref_temp_units_values"
android:dialogTitle="@string/units"
android:layout="@layout/settings_item"
/>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/advanced">
<ListPreference
android:key="pref_speed"
android:title="@string/speed"
android:entries="@array/pref_speed"
android:entryValues="@array/pref_speed_values"
android:defaultValue="@string/default_metric"
android:layout="@layout/settings_item"/>
<ListPreference
android:key="pref_measurement"
android:title="@string/measurement"
android:entries="@array/pref_measurement"
android:entryValues="@array/pref_measurement_values"
android:defaultValue="@string/default_metric"
android:layout="@layout/settings_item"/>
<ListPreference
android:key="pref_time"
android:title="@string/time_format"
android:entries="@array/pref_time"
android:entryValues="@array/pref_time_values"
android:defaultValue="@string/default_metric"
android:layout="@layout/settings_item"/>
<ListPreference
android:key="pref_date"
android:title="@string/date_format"
android:entries="@array/pref_date"
android:entryValues="@array/pref_date_values"
android:defaultValue="@string/default_metric" …Run Code Online (Sandbox Code Playgroud) 我已经使用Android的Preference API设计了一个设计设计.
但我不知道如何创建"主开/关开关".这里提到http://developer.android.com/design/patterns/settings.html但没有关于如何实现它的文档.
从技术上讲,它是位于操作栏中的SwitchPreference,它在关闭时禁用所有子设置.
有任何想法吗?
我正在尝试PreferenceFragment在我的应用程序中添加一个.问题是,它是自动放在我的上面NavigationDrawer.
public class SetPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
navigationDrawer(); // Loads the NavigationDrawer
getFragmentManager().beginTransaction().replace(android.R.id.content,
new Settings()).commit();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我加载"SettingsFragment"并用它替换内容?(我不确定)但它把它置于其他一切之上..这是我的设置片段.
public class Settings extends PreferenceFragment {
static final String TAG = "MAIN";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,但PreferenceFragment被加载到前面,掩盖了NavigationDrawer的滑动,我试着调用bringToFront();listview,没有运气.
参考图片:

是否有可能告诉片段加载到listview后面?我还想在ViewPager中加载片段,但是我得到一个错误,即Pager Adapter不接受PreferenceFragment类型的片段.
android android-preferences android-layout android-fragments
我按照这些说明创建了PreferenceActivity,但未显示PereferenceActivity.活动开始但布局为空白.
Could not find method android.preference.PreferenceActivity.onCreate
VFY: unable to resolve virtual method 950: Landroid/preference/PreferenceActivity;.onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V码:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Settings">
<ListPreference
android:title="Timer"
android:summary="@string/timer_summary"
android:key="prefTime"
android:defaultValue="30"
android:entries="@array/prefTime"
android:entryValues="@array/prefTimeValue"/>
<SwitchPreference
android:title="Shuffle"
android:summary="@string/shuffle_summary"
android:defaultValue="false"
android:key="prefToggleShuffle"/>
<SwitchPreference
android:title="Allow over Wifi-only"
android:summary="@string/wifi_only_summary"
android:defaultValue="false"
android:key="prefWifiOnly"/>
<Preference
android:title="Restore Defaults"
android:summary="@string/restore_summ"/>
<Preference
android:title="Clear Data"
android:summary="@string/shuffle_summary"/>
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)
public class Settings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState); …Run Code Online (Sandbox Code Playgroud) android preferenceactivity android-preferences preferencescreen
请帮助,我的pref_general.xml文件存在一些问题,因为我发现了应用程序发现的SettingsActivity(PreferenceActivity),我收到以下错误消息:
android.view.InflateException:二进制XML文件行#19:错误膨胀类android.widget.CheckBox
然后logcat将该行指向我的PreferenceActivity,我称之为"addPreferencesFromResource(R.xml.pref_general);"
经过几个小时的尝试解决后,我仍然不知道问题是什么,所以也许有人熟悉这个或者只是另一组眼睛可以找到问题.
此外,我在Android 5.1中尝试这一切很好,但在Android Api 19(在我的手机中)什么都没有用?
android.view.InflateException: Binary XML file line #19: Error inflating class android.widget.CheckBox
at android.view.LayoutInflater.createView(LayoutInflater.java:627)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701)
at android.view.LayoutInflater.inflate(LayoutInflater.java:470)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at android.preference.Preference.onCreateView(Preference.java:531)
at android.preference.Preference.getView(Preference.java:494)
at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:222)
at android.widget.AbsListView.obtainView(AbsListView.java:2351)
at android.widget.ListView.makeAndAddView(ListView.java:1816)
at android.widget.ListView.fillDown(ListView.java:697)
at android.widget.ListView.fillFromTop(ListView.java:763)
at android.widget.ListView.layoutChildren(ListView.java:1646)
at android.widget.AbsListView.onLayout(AbsListView.java:2207)
at android.view.View.layout(View.java:15033)
at android.view.ViewGroup.layout(ViewGroup.java:4799)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1534)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1443)
at android.view.View.layout(View.java:15033)
at android.view.ViewGroup.layout(ViewGroup.java:4799)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1677)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1445)
at android.view.View.layout(View.java:15033)
at android.view.ViewGroup.layout(ViewGroup.java:4799)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1534)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1443) …Run Code Online (Sandbox Code Playgroud)