如何更新共享首选项数据

时间:2017-07-03 08:51:13

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

我正在尝试为应用主题设置共享首选项 MainActivity->设置活动 - >主题片段和主题片段。我在显示背景图像时单击它将设置位置,活动将接收位置以设置图像视图,但事情是当我点击片段图像时它是获取新值但在设置片段中我无法获得更新的值。但是在主要活动中它正在更新,但是当我从主活动回到设置活动时它正在更新。这是我正在尝试的代码

  @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);
    }
}

有没有其他方法来更新数据。 我期待它如何工作。当用户点击按钮更新设置活动enter image description here时,我在这个enter image description here的视图寻呼机中显示但是当我按下片段中的后退按钮时background不会更新共享首选项值。

1 个答案:

答案 0 :(得分:0)

使用editor.commit()立即保存。 commit()同步写入数据,其中apply()调度要异步写入的数据