Передача данных между фрагментами Android

Я разрабатываю приложение, состоящее из трёх фрагментов: на первом фрагменте пользователь вводит нужные данные, нажимает на кнопку и на третьем фрагменте строится график, основанный на значениях с первого фрагмента.

Как передать значения (float) с одного фрагмента на другой?

Вот содержимое OnClickListener() в fragment1.java:

Fragment fr = new Fragment();
Bundle bundle = new Bundle();
bundle.putFloat("a", a);
fr.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame,  fr).commit();

Фрагмент кода, получающий bundle в fragment3.java:

Bundle test = getArguments();
if (test != null) {
   Float a = test.getFloat("a");
}

Далее идёт построение графика, для которого мне нужно это значение a:

GraphView graph = (GraphView) rootView1.findViewById(R.id.graph);
        series = new LineGraphSeries<DataPoint>();
        for(int i = 0; i < 1000; i++) {
            x = x + 0.1;
            y = x * test.getFloat("a"); //вот здесь я не знаю как использовать эту переменную, если использовать просто a, то её не существует
            series.appendData(new DataPoint(x, y), true, 1000);
        }
        graph.addSeries(series);

Вот часть ошибок из Logcat:

java.lang.NullPointerException: Attempt to invoke virtual method 'float android.os.Bundle.getFloat(java.lang.String)' on a null object reference
        at com.example.quadraticequationsolver.fragment3.onCreateView(fragment3.java:49)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243)
        at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:146)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1244)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:669)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:631)
        at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:612)
        at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2831)
        at android.support.design.widget.TabLayout.dispatchTabSelected(TabLayout.java:1608)
        at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1601)
        at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1569)
        at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1874)
        at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:2059)
        at android.view.View.performClickInternal(View.java:8137)
        at android.view.View.access$3700(View.java:888)
        at android.view.View$PerformClick.run(View.java:30236)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8633)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

Вот та самая 49 строка из fragment3.java:

y = x + test.getFloat("a");

Ответы (2 шт):

Автор решения: Arty Morris

Используйте статическую переменную, объявленную в главном фрагменте, и работайте с ней из любого фрагмента

static float test_var;
→ Ссылка
Автор решения: DrMcSheen

Можно использовать SharedPreferences. Тут переменные хранятся на диске и можно получить доступ из любой части приложения даже после его перезапуска. Можно даже сразу при запуске заполнять поле ввода значением, которое было введено последний раз.

→ Ссылка