在片段和活动之间使用共享首选项

时间:2016-07-16 16:20:07

标签: java android android-studio android-fragments

我试图在我的第一个活动和第二个活动中驻留的碎片之间使用共享偏好。代码显示了我到目前为止所做的工作,但是我在获取上下文时遇到了问题。我也认为我在做什么不会工作所以只是想要一些快速的帮助。感谢

  

尝试调用虚方法' android.content.Context   android.content.Context.getApplicationContext()'在null对象上   参考

阅读PREFS

 sharedPreferences =  getSharedPreferences("alexcz", MODE_PRIVATE);
 String drawableString = sharedPreferences.getString("PARTICLE_TYPE", "null")

WRITE PREF

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_particle_type, container, false);

        white_blur = (ImageButton)view.findViewById(R.id.white_blur);
        green_blur = (ImageButton)view.findViewById(R.id.green_blur);
        orange_blur = (ImageButton)view.findViewById(R.id.orange_blur);
        pink_blur = (ImageButton)view.findViewById(R.id.pink_blur);
        yellow_blur = (ImageButton)view.findViewById(R.id.yellow_blur);
        blue_blur = (ImageButton)view.findViewById(R.id.blue_blur);

        main main = new main();
        Context context = main.getApplicationContext();

        sharedPref = context.getSharedPreferences("alexcz", main.MODE_PRIVATE);
        editor = sharedPref.edit();

 editor.putString("PARTICLE_TYPE", "white_blur");

        setOnClickListeners();
        return view;
    }

2 个答案:

答案 0 :(得分:3)

永远不要这样做:main main = new main();。而是做:

Context context = getActivity().getApplicationContext();

如果您希望访问片段内的applicationContext。当您使用构造函数初始化Android活动时,一切都搞砸了,只是不要这样做。请参阅this question

答案 1 :(得分:0)

只需替换这些行:

main main = new main();
Context context = main.getApplicationContext();
sharedPref = context.getSharedPreferences("alexcz", main.MODE_PRIVATE);

使用:

sharedPref = getActivity().getSharedPreferences("alexcz", getActivity().MODE_PRIVATE);
editor = sharedPref.edit();

getActivity().MODE_PRIVATE会显示通过static访问instance成员的警告。