标签: preferenceactivity

设置多个SharedPreferences实例/文件的默认值

假设我有一个应用程序将首选项保存到两个文件,preferences1.xmlpreferences2.xml.然后,我可以使用以下代码检索对相应对象的引用:

SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以操纵两者的首选项并注册侦听器以获取两者的更改.

我对这两个文件的初始化有一些疑问,使用setDefaultValues:

问题1 - PreferenceFragment上下文:我已经创建了一个PreferenceActivity具有两个PreferenceFragments和内的onCreate每一个I执行下面的代码的方法(与图1和2为取代片段1 X和2):

PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");

PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
Run Code Online (Sandbox Code Playgroud)

我已经看到两个片段在启动时都正确地设置了它们的默认值.但是,鉴于我在应用程序的shared_prefs目录中只能看到一个_has_set_default_values.xml文件,它是如何理解属性的preferences1.xmlpreferences2.xml已经设置好了吗?只要在第一个打开的PreferenceFragment中调用setDefaultValues就会创建此文件,但即使在此之后,如果我打开第二个PreferenceFragment,它也会正确初始化默认值.如何理解它尚未初始化preferences2.xml以及_has_set_default_values.xml的目的是什么,因为它不包含有关哪些优先文件已被初始化的信息?

问题2 - 标准活动上下文:当我启动我的应用程序时,PreferenceActivity不是第一个启动的活动,用户可能永远不会打开它,所以我想在主Activity中初始化两个首选项文件及其默认值,我怎样才能做到这一点?对于默认的共享首选项,很容易:

PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false); 
Run Code Online (Sandbox Code Playgroud)

对于两个首选项文件,我该怎么办?我无法执行以下操作,因为我无法在PreferenceFragment类中检索PreferenceManager的实例:

PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND …
Run Code Online (Sandbox Code Playgroud)

android preferenceactivity android-preferences sharedpreferences android-activity

21
推荐指数
1
解决办法
2701
查看次数

MultiSelectListPreference示例

我很难找到Android API中提供的MultiSelectListPreference的一个很好的例子.我看过很多对这个博客的引用,这就是我想要的最终结果,我不想为我想要实现的每个多选择首选项创建一个类.最后,我希望看到一个简单的多选对话框(我将动态填充值)的首选项xml,以及调用addPreferencesFromResource(R.xml.preferences);

目前,我有:

<MultiSelectListPreference
    android:defaultValue=""
    android:enabled="true"
    android:entries="@array/pref_default_entries"
    android:entryValues="@array/pref_default_values"
    android:key="TargetList"
    android:persistent="true"
    android:summary="@string/TargetSummary"
    android:title="@string/TargetTitle" />
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的Activities onCreate调用中调用addPreferencesFromResource时,我收到以下错误:

06-18 13:59:30.690: E/AndroidRuntime(6052): FATAL EXCEPTION: main
06-18 13:59:30.690: E/AndroidRuntime(6052): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tracker/com.tracker.TrackerActivity}: android.view.InflateException: Binary XML file line #37: Error inflating class java.lang.reflect.Constructor
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1818)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.access$500(ActivityThread.java:122)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1027)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.os.Looper.loop(Looper.java:132)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.main(ActivityThread.java:4126)
06-18 13:59:30.690: …
Run Code Online (Sandbox Code Playgroud)

android multi-select preferenceactivity

21
推荐指数
2
解决办法
3万
查看次数

更改PreferenceScreen时,请保持操作栏显示

我正在尝试在我的首选项屏幕中显示操作栏.为此,我在SettingActivity中添加了以下代码

public class PreferencesActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.preferences_activity);
        getFragmentManager().beginTransaction()
                .replace(R.id.container, new PreferencesFragment()).commit();

            getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是我在PreferencesFragment中的其余代码.这样可以正常工作,但只要按下PreferenceScreen首选项,操作栏就会隐藏.如果我回到偏好主屏幕,我可以再次看到它.知道如何显示操作栏(并使用PreferenceScreen标签更新)吗?

编辑:查看PreferenceScreen代码,当单击PreferenceScreen时,它看起来像是一个全屏对话框.因为我的偏好有标题,所以Dialog也应该显示标题......但事实并非如此

    // Set the title bar if title is available, else no title bar
    final CharSequence title = getTitle();
    Dialog dialog = mDialog = new Dialog(context, context.getThemeResId());
    if (TextUtils.isEmpty(title)) {
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    } else {
        dialog.setTitle(title);
    }
Run Code Online (Sandbox Code Playgroud)

android preferenceactivity android-actionbar preferencefragment

18
推荐指数
2
解决办法
7362
查看次数

PreferenceActivity中的DialogFragment

我已定义dialogfragments(因为Android文档说它更好,确实是这样)但现在我想用它PreferenceActivity.

问题是我不能getSupportFragmentManager()在那里使用,我不能使用PreferenceFragment,因为它不兼容兼容库.看起来像一个路障场景.

任何人都可以就此提出建议吗?

android preferenceactivity android-dialogfragment

17
推荐指数
1
解决办法
3438
查看次数

如何在PreferenceActivity中添加ToolBar?

我想添加ToolBarPreferenceActivity我的Android应用程序.我写了以下代码.

  public class SettingsActivity extends PreferenceActivity  {
 SendSMS sms;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    android.support.v7.widget.Toolbar bar = (android.support.v7.widget.Toolbar) LayoutInflater.from(this).inflate(R.layout.action_bar_setting, root, false);
    root.addView(bar, 0);
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
Run Code Online (Sandbox Code Playgroud)

}

这在我的机器人Kitkat手机API 19中完美运行,但强制关闭API级别10即姜饼.请建议我.

android toolbar preferenceactivity

17
推荐指数
2
解决办法
2万
查看次数

Android - 带有Preference活动的DataBinding

我在xml中设置数据绑定但是当我转到首选项活动以实际设置绑定时我不能.数据绑定xml所在的文件名为preference.xml,因此我假设应该有一个名为PreferencesBinding的生成类,而不是.它应该不是自动生成的吗?另外我在preferenceActivity.java中的代码不会编译以下内容:

    Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         PreferencesBinding binding = DataBindingUtil..... //what do put here ??? this is preferenceactivity not Activity

         Admin user = new Admin(true);
         binding.setUser(user);//this what i want to do

         addPreferencesFromResource(R.xml.preferences);//this would not be necessary if i can get dataBinding to work
//..rest of code not important
       }
Run Code Online (Sandbox Code Playgroud)

我开始认为数据绑定不适用于偏好屏幕,任何人都可以帮忙吗?

如果neseccary看起来像这样的preferences.xml文件:

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customNS="http://schemas.android.com/apk/res/mypackage"
    >
    <data>
        <variable name="admin" type="mypackage.Administration"/>
    </data>

<PreferenceScreen>

<!-- ....bunch of preferences ... -->
</PreferenceScreen>
</layout
Run Code Online (Sandbox Code Playgroud)

xml android preferenceactivity android-databinding

17
推荐指数
2
解决办法
1700
查看次数

从RingtonePreference获取铃声标题

我有一个RingtonePreference,用于选择一个铃声,该铃声被广播到Alarm应用程序中使用的接收器.
我想在RingtonePrefernce的摘要中显示所选铃声的标题(在您选择铃声时看到的列表中显示的标题).不知何故获得ID3标签?有些铃声是mp3而不是全部,所以这可能不是一个好主意?

我现在做的是:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
strRingtonePreference = prefs.getString("RingtonePref", "DEFAULT_RINGTONE_URI");
Run Code Online (Sandbox Code Playgroud)

这将使strRingtonePreference看起来像"content:// media/internal/audio/media/55",这对用户来说不是很有用.

我怎样才能做到这一点?

android id3 preferenceactivity ringtone

16
推荐指数
1
解决办法
9625
查看次数

android - 如何在Android 3.0中为PreferenceActivity设置自定义布局?

我正在使用minSdkVersion ="11"开发应用程序,这是适用于平板电脑和Android 4.0及更新版本的应用程序.我已经仔细审查了这个话题,但是没有找到太多.

要为以前版本的Android SDK实现自定义布局,我们只需要使用ListView创建布局(比如preference.xml),其id等于android.R.id.list并使用setContentView方法.

preference.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > 
    <ListView android:id="@android:id/list"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent" /> 
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在Android 3.0中,事情发生了变化,使用片段实现了Preferences.这就是我的preference_headers.xml文件的样子:

<preference-headers
        xmlns:android="http://schemas.android.com/apk/res/android">

    <header android:fragment="com.example.MyPreferenceActivity$GeneralSettingsFragment" 
            android:title="General"
            android:summary="Common settings." />
    <header  
            android:title="Example.com" >
        <intent android:action="android.intent.action.VIEW"
                android:data="http://www.example.com" />
    </header> 

</preference-headers>
Run Code Online (Sandbox Code Playgroud)

MyPreferenceActivity.java:

public class MyPreferenceActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.preference);
        // Add a button to the header list.
        if (hasHeaders()) {
            Button button = new Button(this); 
            button.setText("Log out");
            setListFooter(button);

        }

    }


    /**
     * Populate the …
Run Code Online (Sandbox Code Playgroud)

android preferenceactivity android-3.0-honeycomb

16
推荐指数
2
解决办法
1万
查看次数

首选项上的首选项活动单击"侦听器"

我正在构建一个Preference Activity,其中列表中的大多数首选项将执行代码而不直接修改SharedPreference.我的preferences.xml文件看起来像这样.

<PreferenceCategory
    android:title="Connection" >

    <Preference
        android:id="@+id/settings_connectToNewComputer"
        android:key="connectToNewComputer"
        android:summary="Currently connected to:"
        android:title="Connect to new computer" />

    <Preference
        android:id="@+id/removeDevice"
        android:key="removeDevice"
        android:summary="Remove this device from the computer's whitelist"
        android:title="Remove this device from computer" />

</PreferenceCategory>

<PreferenceCategory
    android:title="About" >

    <Preference
        android:id="@+id/settings_About"
        android:key="about"
        android:summary="About me and my thanks to those who made this app great"
        android:title="About Hue Pro" />

    <Preference
        android:id="@+id/contact"
        android:key="contact"
        android:summary="Contact me with comments, bugs, and suggestions for updates"
        android:title="Contact me" />

</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)

我的目标是在单击其中一个首选项时执行一段代码.与Google Play设置首选项菜单中的"清除搜索记录"类似.(http://i.imgur.com/qnHbJX9.png)

有谁知道如何使这成为可能?

我必须补充一点,我尝试使用findPreference("KeyNameHere"),但它总是返回null.

谢谢!


编辑:

我在此代码中添加并实现了OnPreferenceClickListener: …

android preferenceactivity onclicklistener

15
推荐指数
6
解决办法
3万
查看次数

setDisplayHomeAsUpEnabled()在PreferenceActivity中不起作用

我有一个SettingsActivity扩展PreferenceActivity到我的应用程序中显示设置.

有一个后退箭头,但它不起作用.

这是SettingsActivity.java文件的代码:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{

    private AppCompatDelegate mDelegate;

    public static final String RESET_PASSWORD_KEY = "reset_password";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        getDelegate().installViewFactory();
        getDelegate().onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        SharedPreferences sharedPreferencesCompat = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

        Preference myPref = (Preference) findPreference(RESET_PASSWORD_KEY);
        myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                //open browser or intent here
                Intent resetPasswordActivityIntent = new Intent(SettingsActivity.this, ResetPasswordActivity.class);
                startActivity(resetPasswordActivityIntent);
                return true;
            }
        });

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android preferenceactivity android-preferences android-sharedpreferences

14
推荐指数
2
解决办法
1万
查看次数