Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自onclick的Android SharedReferences在片段中_Java_Android_Sharedpreferences - Fatal编程技术网

Java 来自onclick的Android SharedReferences在片段中

Java 来自onclick的Android SharedReferences在片段中,java,android,sharedpreferences,Java,Android,Sharedpreferences,我希望有人能给我一些关于如何从onViewCreated事件中定义的按钮onclick事件中访问SharedReferences的指导 我可以通过调用以下命令在onViewCreated事件中设置接口的值: SharedPreferences prefs = this.getActivity().getSharedPreferences( "com.example.app", Context.MODE_PRIVATE); 并获得适当的值,但我在界面上有一个按钮要按下以保存更改,我似乎无

我希望有人能给我一些关于如何从onViewCreated事件中定义的按钮onclick事件中访问SharedReferences的指导

我可以通过调用以下命令在onViewCreated事件中设置接口的值:

SharedPreferences prefs = this.getActivity().getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE);
并获得适当的值,但我在界面上有一个按钮要按下以保存更改,我似乎无法找到从我的按钮单击事件中访问SharedReferences的正确方法:

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在视图中不起作用。有人能告诉我如何从这里访问活动,这样我就可以访问SharedReferences了吗?

您是否尝试过使用getActivity().GetSharedReferences()

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

注意:由于我的名声不好,无法将此作为问题提问。

您是否尝试过仅使用getActivity().GetSharedReferences()


注意:因为我的名声不好,所以不能问这个问题。

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

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

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

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

大家好,欢迎来到StackOverflow

您无法访问
SharedReferences
的原因是
this
不是片段:如果仔细观察,您会发现您有两个嵌套上下文,因此
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您想要什么

另外,请记住您可以轻松地从任何视图获取上下文。因此,在单击处理程序中,您还可以执行以下操作:

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

            }
        });

希望有帮助

大家好,欢迎来到StackOverflow

您无法访问
SharedReferences
的原因是
this
不是片段:如果仔细观察,您会发现您有两个嵌套上下文,因此
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您想要什么

另外,请记住您可以轻松地从任何视图获取上下文。因此,在单击处理程序中,您还可以执行以下操作:

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

            }
        });

希望有帮助

谢谢你,先生!这就成功了。我必须找到Android框架的某种图形描述,这样我才能可视化层次结构,并确定如何从我所在的位置访问不同的部分。对于我来说,这是Android开发中最耗时的一个方面。如果有任何问题,请随意在这里发布,这是一个人们乐于帮助的社区。顺便说一句,如果你发现这个答案很有用——以及未来问题中的任何答案——你应该“接受”它,这意味着按下复选标记。这会给你的“声誉”和回答它的人增加分数。您可以在网站上找到相关信息,谢谢您,先生!这就成功了。我必须找到Android框架的某种图形描述,这样我才能可视化层次结构,并确定如何从我所在的位置访问不同的部分。对于我来说,这是Android开发中最耗时的一个方面。如果有任何问题,请随意在这里发布,这是一个人们乐于帮助的社区。顺便说一句,如果你发现这个答案很有用——以及未来问题中的任何答案——你应该“接受”它,这意味着按下复选标记。这会给你的“声誉”和回答它的人增加分数。你可以在网站上找到这方面的信息