Вызвать метод фрагмента из dialogfragment - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь вызвать функцию 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.Я не могу понять, как решить мою проблему, и я буду счастлив, если кто-то поможет мне с решением.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Простой и рекомендуемый способ:

Сначала создайте обратный вызов во фрагменте: как?

interface DialogCallBack{
    void callback(View view);
}

реализует интерфейс для вашего фрагмента, а когда вы создаете конструктор для своего диалогового фрагмента, просто передайтеобратный вызов для этого фрагмента.

Затем в вашем dialogFragment:

btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
            listener.callback(view);
        }
    });

метод интерфейса вызова слушателя, который реализован на фрагменте.Так что сделайте это внутри вашего фрагмента:

@override
callback(View view){
 testFunction(view);
}
0 голосов
/ 05 февраля 2019

пожалуйста, попробуйте следующим образом

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", ""));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...