标签: android-preferences

调用Android的getSharedPreferences()的问题; 来自SQLiteOpenHelper类

首先,我想简要描述一下我的情况.

我有两个类,一个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

database android android-preferences

3
推荐指数
1
解决办法
8252
查看次数

如何创建"信息"偏好

我创建了一个PreferenceActivity.一些偏好是纯粹的信息.我希望它们有点变灰,所以很明显点击它们不应该做任何事情.

我怎么做?

android android-preferences android-layout

3
推荐指数
1
解决办法
938
查看次数

无法获取设置按钮以显示动态壁纸

我想为我创建的动态壁纸添加设置.我遗漏了一些关于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 android-preferences

3
推荐指数
1
解决办法
6082
查看次数

来自xml首选项文件的defaultValue没有存储 - 为什么?

当应用程序第一次启动时,我想通过使用'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

3
推荐指数
1
解决办法
4192
查看次数

检查首选项中是否已有登录名和密码

我看到了一些自动登录的教程例如这个链接,但是当我第一次使用该应用程序时,如何检查登录名和密码是否已经插入到"首选项活动"中?我应该放什么条件?

passwords android login android-preferences

3
推荐指数
1
解决办法
1282
查看次数

从PreferenceFragment访问列表视图

我需要在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 android-preferences android-fragments

3
推荐指数
1
解决办法
7297
查看次数

ActionBar中的主开/关开关

我已经使用Android的Preference API设计了一个设计设计.

但我不知道如何创建"主开/关开关".这里提到http://developer.android.com/design/patterns/settings.html但没有关于如何实现它的文档.

从技术上讲,它是位于操作栏中的SwitchPreference,它在关闭时禁用所有子设置.

有任何想法吗?

android android-preferences android-actionbar

3
推荐指数
1
解决办法
7225
查看次数

片段放在NavigationDrawer之上

我正在尝试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

3
推荐指数
1
解决办法
1288
查看次数

未显示PreferenceActivity(空白屏幕)

我按照这些说明创建了PreferenceActivity,但未显示PereferenceActivity.活动开始但布局为空白.

  1. 我也通过引用developer.android.com在我的应用程序中使用材料设计NavDrawer,但我希望它不会影响
  2. 我正在测试运行Kitkat的设备上的应用程序
  3. 以下是我发布PreferenceActivity "截图"时会发生什么
  4. logcat的: 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

码:

app_preference.xml

<?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)

Settings.java

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

3
推荐指数
1
解决办法
1676
查看次数

扩展类android.widget.CheckBox时出错

请帮助,我的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)

xml checkbox android android-preferences

3
推荐指数
1
解决办法
2322
查看次数