从dialogfragment调用片段方法

时间:2019-02-05 08:21:44

标签: android android-fragments dialog

我正在尝试从fragment调用dialogfragment函数。我的应用程序基于navigation drawer,其中包含fragments的容器。在我的fragments之一中,我提出了retrofit请求,也可以从此dialogfragment打开fragment。但是我面临一个非常严重的问题-从SharedPreferences调用片段函数后,我无法得到dialogFragment。在这里,我怎么称呼这个方法:

 btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
                JobList jobList = new JobList();
                jobList.testFunction();
            }
        });

这是我的testFunction()

public void testFunction() {
        sp = Objects.requireNonNull(getActivity()).getSharedPreferences("app_data", 0);
        Log.w("MY_tag", sp.getString("access_token", ""));
    }

我的testFunction仅包含实验日志,因为我尝试从sharedpreferences中获取数据,但仅收到错误:

  

java.lang.NullPointerException

放置断点后,我了解到我无法获得任何用于获取sharedPreferences的上下文。我不明白如何解决我的问题,如果smb帮助我解决问题,我会很高兴。

2 个答案:

答案 0 :(得分:1)

请尝试如下

btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
            JobList jobList = new JobList();
            jobList.testFunction(view);
        }
    });

  public void testFunction(View view) {
    sp = Objects.requireNonNull(view.getContext()).getSharedPreferences("app_data", 0);
    Log.w("MY_tag", sp.getString("access_token", ""));
}

答案 1 :(得分:1)

简单推荐的方法:

首先在片段中进行回调:如何?

interface DialogCallBack{
    void callback(View view);
}
片段上的

实现接口,当为dialogfragment创建构造函数时,只需传递该片段的回调即可。

然后在您的对话框中片段:

btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
            listener.callback(view);
        }
    });
在片段上实现的

listener调用接口方法。在片段中执行以下操作:

@override
callback(View view){
 testFunction(view);
}