标签: android-multiselectlistpreference

从MultiSelectListPreference(SharedPreferences)获取所有选定的条目

我想使用MultiSelectListPreference创建一个项目数组并在xml中搜索它们.

我用XML创建了MultiSelectListPreference(res/xml/preferences.xml)

<MultiSelectListPreference
            android:dialogTitle="@string/coursesTitle"
            android:key="searchedCourses"
            android:summary=""        
            android:title="@string/coursesTitle"
            android:entries="@array/courses"
            android:entryValues="@array/courses"
            android:defaultValue="@array/empty_array"
            android:dependency="own_courses"
           />
Run Code Online (Sandbox Code Playgroud)

我创建了一个偏好片段和一个偏好活动.我已经可以选择我想要搜索的项目了.

现在我想读出所选项目.

我试过了

SharedPreferences sharedPref =   PreferenceManager.getDefaultSharedPreferences(this);
 String rawval = sharedPref.getString("searchedCourses", "NA");
 String[] selected = this(context, null).parseStoredValue(rawval);

 Toast.makeText(context, selected[0], Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

和我在网上找到的类似"解决方案",但它不起作用.

xml android sharedpreferences android-multiselectlistpreference

6
推荐指数
1
解决办法
7828
查看次数

最初未在列表中显示时,不检查MultiSelectListPreference复选框(API 23)

给定一个带有MultiSelectListPreference的SettingsActivity及其数组资源中的条目,值和默认值,即使Android知道应该检查它们,也不会将某些复选框绘制为已选中.单击未选中的项目时,该项目仍未选中(因为Android认为它取消选中已选中的项目).

这是一个发生这种情况的视频

项目可在此处获取:https://github.com/ImmersibleElf/MSLPBug

它似乎在API 21和22中运行良好,但在23中没有.这可能是回收视图中的错误吗?或者可能是什么原因?

SettingsActivity.java

package com.immersibleelf.mslpbug;

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;

public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the settings from an XML resource
            addPreferencesFromResource(R.xml.settings);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

的settings.xml

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

android android-checkbox android-multiselectlistpreference android-6.0-marshmallow

6
推荐指数
1
解决办法
781
查看次数

Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged

我正在使用具有以下属性的MultiSelectListPreference

<MultiSelectListPreference        
 android:key="shop_list"               
 android:entries="@array/shop_titles"
 android:entryValues="@array/shop_values"
     android:title="@string/pref_title_shops"   
     android:dialogTitle="@string/pref_title_shops" 
 android:defaultValue="@array/shop_values"
 android:summary="Choose where you hunt"
 />   
Run Code Online (Sandbox Code Playgroud)

偏好在静态PreferenceFragment内部,在普通内部Activity。我SharedPreferenceChanged正在为onPauseonResume上的事件注册和取消注册侦听器PreferenceFragment

代码摘录:

public class AgentSettingsActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }

    public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            Utils.Log("onCreate");

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.pref_general);

        }

        @Override
        public void onResume()
        {
            Utils.Log("onResume");
                    super.onResume(); …
Run Code Online (Sandbox Code Playgroud)

events android listener android-multiselectlistpreference

5
推荐指数
1
解决办法
1827
查看次数

如何为多选列表首选项实现"全选"选项?

我想知道是否有任何方法可以通过代码选择/检查多选列表首选项的所有框.

这是我的首选XML文件.

<MultiSelectListPreference
    android:entries="@array/list"
    android:entryValues="@array/lValues"
    android:key="list"
    android:summary="This is a list to choose from"
    android:title="Teams to Follow" />

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

这些是数组:

<string-array name="list">
    <item>All Teams</item>
    <item>Team1</item>
    <item>Team2</item>
    <item>Team3</item>
    <item>Team4</item>
</string-array>
<string-array name="lValues">
    <item>All</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)

现在,我的列表中的第一项将是"所有团队",我想让它成为用户选择所有团队的时刻,所有团队名称都应该在他们旁边进行检查.

应检查所有方框

android sharedpreferences android-multiselectlistpreference

5
推荐指数
1
解决办法
2485
查看次数

如何在代码中设置 MultiSelectListPreference defaultValue

我在动态设置 MultiSelectListPreference 时遇到问题(对于 Android 来说,任何动态都是绝对神秘的,但那是另一个故事了)

我无法仅在代码中设置完整的preferenceActivity,因此我必须编写preferences.xml 并修改代码中的控件。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
  <PreferenceCategory android:key="prefCat" android:title="CatTitle">

     <MultiSelectListPreference
       android:key="multiPref"
       android:title="Title"
       android:dialogTitle="DialogTitle"
       android:summary="Summary"/>

     <ListPreference android:key="listPrefOne"...></ListPreference>

     <ListPreference android:key="listPrefTwo"...></ListPreference>

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

这是应用程序设置代码

public class AppSettings : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.AppSettings);

        var prefsFragment = new MyPreferenceFragment();

        var fragmentTransaction = FragmentManager.BeginTransaction();
        fragmentTransaction.Replace(Resource.Id.content, prefsFragment);
        fragmentTransaction.Commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

...和 ​​PreferenceFragment

public class MyPreferenceFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        AddPreferencesFromResource(Resource.Xml.preferences);
        var multiPref = FindPreference("multiPref") as MultiSelectListPreference;

        var multiPreferenceCount = LocalDB.MultiPreferences.Count;
        var …
Run Code Online (Sandbox Code Playgroud)

android xamarin android-multiselectlistpreference

5
推荐指数
0
解决办法
1113
查看次数