【问题标题】:SharedPreference use in custom dialogSharedPreference 在自定义对话框中的使用
【发布时间】:2012-11-25 20:38:27
【问题描述】:

我创建了扩展preferenceActivity 的活动。在该活动中,我打开了显示项目列表的自定义对话框。每当我单击 listview 中的项目时,对话框都会关闭。当时我想将选定的项目存储在 SharedPreference 中,以便在应用程序范围内获取该项目。

但我的问题是如何将选定的项目存储在 SharedPreference 中?

当我下次打开我的应用程序时,我应该能够检索以前选择的项目。

这是我的 PreferenceActivity 代码:

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener 
{
    SharedPreferences myprefs;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.settings);
        addPreferencesFromResource(R.xml.prefs);

        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);

        Preference prefereces=findPreference("alertdialog_Font_Style");
        prefereces.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            public boolean onPreferenceClick(Preference preference) {
                // TODO Auto-generated method stub
                DialogFontStyle objdialog = new DialogFontStyle(SettingsActivity.this,R.style.CustomDialogTheme);
                objdialog.show();
                return true;
            }


        });
    }

这是我的对话类:

public class DialogFontStyle extends Dialog {

    public DialogFontStyle(Context context, int theme) {
        super(context, theme);
        // TODO Auto-generated constructor stub
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.dialog_layout);

        final String[] sizeType = new String[] {"a" , "b" , "c" , "d"};       

            final ListView lst = (ListView)findViewById(android.R.id.list);

            ArrayAdapter<String> adapter = new ArrayAdapter<String> (context,android.R.layout.simple_list_item_1,sizeType);                  
         lst.setAdapter(adapter);

             lst.setOnItemClickListener(new OnItemClickListener() {
                 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub

                    dismiss();
                }
             });
    } 
}

请给我一些将数据存储在 sharedpreference 中的解决方案。 谢谢。

【问题讨论】:

标签: android android-listview sharedpreferences android-preferences preferenceactivity


【解决方案1】:

要写一些东西来分享偏好,请使用以下代码:

SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences( mContext );
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean( KEY, VALUE );
editor.commit();

mContext 应该是您的活动或应用程序的上下文,而不是对话框。或者,如果您的对话框在您的活动中,请使用 SettingsActivity.this 或在 onCreate() 上创建类成员 mContext 和 initi

【讨论】:

  • 在对话框的onItemClicked()
【解决方案2】:

您有多种选择:

  • 您可以扩展ListPreference 类来自定义其外观或行为,而不是制作自定义对话框,但依赖于settings screens 使用的默认机制。然后,保存将由 ListPreference 超类管理。

  • 您可以通过调用 Context.getSharedPreferences() 方法获取共享首选项来手动存储首选项,然后获取 Editor,这将允许您将值放入共享首选项并提交这些更改。

要取回之前存储的item,只需要再次获取SharedPreferences对象,调用想要的get..()方法就可以获取之前存储的key。

【讨论】:

  • 你能给我一些关于如何扩展 listpreference 和制作列表的想法吗?
  • 你可以看看这个:developer.android.com/guide/topics/ui/settings.html#Custom。但是,如果您只需要文本字符串列表,则可以使用 ListPreference 本身。然后,您可以指定要显示的本地化字符串以及与每个字符串关联的值。
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2011-10-18
相关资源
最近更新 更多