【问题标题】:how to update the shared preference data如何更新共享偏好数据
【发布时间】:2017-07-03 08:51:12
【问题描述】:

我正在尝试为应用的主题设置共享偏好 MainActivity-> Settings Activity -> Theme fragment 和在主题片段中。我正在显示背景图像,单击它会设置位置,并且该位置将由 Activity 接收以设置图像视图,但事情是当我单击片段图像,它正在采用新值,但在设置片段中我无法获得更新的值。但是在主要活动中它正在更新但是当我从主要活动返回到设置活动时它正在更新。这是我正在尝试的代码

  @Override
protected void onResume() {
    super.onResume();
    SharedPreferences settings = getSharedPreferences("YOUR_PREF_NAME", 0);
    int snowDensity = settings.getInt("SNOW_DENSITY", 0);


    Glide.with(Settings.this).load(img[snowDensity])
            .thumbnail(1f)
            .fitCenter()
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(imageView);
}

这样我设置共享首选项

 private class MyPagerAdapter extends PagerAdapter {
    private int img[] = {R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6
    };

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        ImageView view = new ImageView(getActivity());

        Glide.with(getActivity()).load(img[position])
                .thumbnail(1f)
                .fitCenter()
                .error(R.drawable.music)
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(), "Ringtone Set" + position, Toast.LENGTH_SHORT).show();
                SharedPreferences settings = getActivity().getSharedPreferences("YOUR_PREF_NAME", 0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putInt("SNOW_DENSITY", position);
                editor.commit();
            }
        });
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return 6;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == object);
    }
}

还有其他方法可以更新数据吗? 我期望它如何工作。我在这样的视图寻呼机中显示 当用户单击按钮时它会更新设置活动 但是当我从片段中按下后退按钮时,背景没有得到更新了 sharedpreference 值。

【问题讨论】:

  • 分享您用于在 sharedpreferences 中存储数据的代码
  • 我假设"YOUR_PREF_NAME" 是一个字符串常量,不应该被引用
  • 这个“YOUR_PREF_NAME”没问题,它会正常工作,getSharedPreferences 方法只需要一个字符串名称来制作首选项文件
  • 我添加了我如何存储共享首选项的代码
  • 无论问题中尝试了什么,并且没有明显的错误。这是一个副本。 stackoverflow.com/questions/3624280/…

标签: android android-activity activity-lifecycle android-sharedpreferences


【解决方案1】:

使用 editor.commit() 立即保存。 commit() 同步写入数据,而 apply() 安排异步写入数据

【讨论】:

  • 我试过那个兄弟,我试图把它放在每个活动生命周期方法中然后只有我在堆栈中询问
  • 您从哪里打开设置活动(您共享的第二个屏幕)?它不是来自查看寻呼机项目点击监听器
  • 不,先生,视图寻呼机只是设置共享首选项,我正在从主要活动打开设置活动或从它们片段按返回按钮
  • 你每次都得到零个位置吗?您是否调试过代码并检查是否调用了 view pager on click?
  • 是的,它被调用了,但是当我按下主题片段中的后退按钮时它没有得到更新
猜你喜欢
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2019-03-06
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多