来自onclick的Android SharedPreferences片段

时间:2014-03-25 01:14:53

标签: java android sharedpreferences

我希望有人可以就如何在onViewCreated事件中定义的按钮的onclick事件中访问SharedPreferences给我一些指示。

我可以通过调用:

在onViewCreated事件中设置我的接口的值
SharedPreferences prefs = this.getActivity().getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE);

并获得适当的值,但我在界面上有一个按钮来保存更改,我似乎无法从按钮的点击事件中找到正确的方法来访问SharedPreferences:

Button btn = (Button)view.findViewById(R.id.btnSave);
btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click
        Log.d("test","here");
        SharedPreferences prefs = this.getActivity().getSharedPreferences(
                "com.example.app", Context.MODE_PRIVATE);

    }
});

这段代码显然不起作用,因为这里指的是视图,而getActivity在视图中不起作用。任何人都可以告诉我如何从这里访问活动,以便我可以访问SharedPreferences?

3 个答案:

答案 0 :(得分:5)

您好,欢迎来到StackOverflow。

您无法访问SharedPreferences的原因是因为this 片段:如果您仔细观察,您会发现自己有2 嵌套上下文,因此this实际上是OnClickListener对象(位于片段内)。

当您需要访问“父上下文”时,您可以这样做:

 public class MyCoolFragment extends Fragment {

    // here "this" is in fact your Fragment,
    // so this.getActivity().getSharedPreferences() DOES exist

    .
    .
    .

    Button btn = (Button)findViewById(R.id.btnSave);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            // Perform action on click
            // "this" is NO LONGER your fragment, but the View.OnClickListener
            // to access the PARENT CONTEXT you prepend the CLASS NAME:

            // MyCoolFragment.this.getActivity().getSharedPreferences will work:


            SharedPreferences prefs = MyCoolFragment.this.getActivity().getSharedPreferences()
                    "com.example.app", Context.MODE_PRIVATE);

        }
    });

在Java中非常典型地拥有深度嵌套的上下文,因此您必须告诉Java您想要的this

另外,请记住您可以轻松地从任意视图中获取上下文。,所以在点击处理程序中您也可以这样做:

        Button btn = (Button)view.findViewById(R.id.btnSave);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                Activity myActivity=(Activity)(v.getContext()); // all views have a reference to their context
                SharedPreferences prefs =myActivity.getSharedPreferences(
                        "com.example.app", Context.MODE_PRIVATE);

            }
        });

希望它有所帮助!

答案 1 :(得分:0)

您是否尝试过使用getActivity()。getSharedPreferences()?

SharedPreferences prefs = getActivity().getSharedPreferences(
            "com.example.app", Context.MODE_PRIVATE);

注意:因为我的声誉很低,所以不能问这个问题。

答案 2 :(得分:0)

兄弟,这很简单。从我的片段中看到我的代码。你会明白怎么做

   SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
   return sharedPreferences.getString(key, "");