将EditText的值从片段恢复到另一个

时间:2016-04-13 21:28:40

标签: java android android-fragments

我的EditText位于我的片段中: EquationsCalculFragment.java 我想恢复我的片段中的值: EquationsResultat.java

我有两个NullPointerException没有明显的原因(请参阅代码中的注释)。 注意:对于EquationsResultsFragment中的错误,我尝试使用String.valueOf()Float.parseFloat()进行投射,两者合并......但没有人工作。

EquationsCalculFragment.java

    public class EquationsCalculFragment extends Fragment {
        private ViewPager viewPager;
        private EditText champ_a;
        private EditText champ_b;
        private String a;
        private String b;

        public float getA_equa_2nd() {
            return Float.parseFloat(a);
        }

        public float getB_equa_2nd() {
            return Float.parseFloat(b);
        }

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View view = inflater.inflate(R.layout.fragment_equations_calcul, container, false);

            viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager);

            champ_a = (EditText) view.findViewById(R.id.equa_2nd_a);
            champ_b = (EditText) view.findViewById(R.id.equa_2nd_b);

            Button button = (Button) view.findViewById(R.id.btn_equations_resultats);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    b = champ_b.getText().toString();
                    a = champ_a.getText().toString();
                    EquationsResultatFragment eqResFr = new EquationsResultatFragment();
                    eqResFr.getResultat(getA_equa_2nd(), getB_equa_2nd()); //NullPointerException happens here
//at com.example.slabre.applitest.EquationsCalculFragment$1.onClick(EquationsCalculFragment.java:60)
                    viewPager.setCurrentItem(1, true);
                }
            });
            return view;
        }
    }

EquationsResultat.java

    public class EquationsResultatFragment extends Fragment {
        private TextView results;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_equations_resultat, container, false);

            results = (TextView) view.findViewById(R.id.equa_2nd_resultat);

            return view;
        }

        public void getResultat(float a, float b) {
            results.setText(String.valueOf((a*a)+(2*a*b)+(b*b))); // NullPointerException happens here
// at com.example.slabre.applitest.EquationsResultatFragment.getResultat(EquationsResultatFragment.java:29)
       }
    }

希望你能帮助我,我认为这不是一个大问题。

家长活动: TabFragment.java (是的,我的应用程序使用TabLayout和ViewPager)

public class TabFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 3 ;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /**
         *Inflate tab_layout and setup Views.
         */
        View x =  inflater.inflate(R.layout.tab_layout,null);
        tabLayout = (TabLayout) x.findViewById(R.id.tabs);
        viewPager = (ViewPager) x.findViewById(R.id.viewpager);

        /**
         *Set an Apater for the View Pager
         */
        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewPager);
            }
        });

        return x;

    }

    class MyAdapter extends FragmentPagerAdapter{

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        /**
         * Return fragment with respect to Position .
         */

        @Override
        public Fragment getItem(int position)
        {
            switch (position){
                case 0 : return new EquationsCalculFragment();
                case 1 : return new EquationsResultatFragment();
                case 2 : return new EquationsInfosFragment();
            }
            return null;
        }

        @Override
        public int getCount() {

            return int_items;

        }

        /**
         * This method returns the title of the tab according to the position.
         */

        @Override
        public CharSequence getPageTitle(int position) {

            switch (position){
                case 0 :
                    return "Calcul";
                case 1 :
                    return "Résultats";
                case 2 :
                    return "Infos";
            }
            return null;
        }
    }

}

3 个答案:

答案 0 :(得分:0)

点击EquationsResultat按钮后会调用<{getResultat&#39; EquationsCalculFragment,并应设置EquationsResultat&#39; s TextViewresults)文字。问题是,results EquationsResultat上设置了onCreateView,似乎尚未调用此方法,因此results仍然为空。< / p>

发布您的活动代码,您可以更轻松地了解何时附加碎片等。

答案 1 :(得分:0)

首先,您不能直接在不同的片段之间进行通信。您需要完成容器活动。

声明一个侦听器接口,您的片段将通过该接口与容器活动进行通信。将该听众附加到EquationsCalculFragment。您的容器活动应该实现该侦听器。 现在,当您EquationsCalculFragment想要与EquationsResultatFragment通信时,您将使用该侦听器通知您的容器活动。在容器活动中,当您获得侦听器回调时,使用EquationsResultatFragmentfindFragmentById(int id)抓取findFragmentByTag(String tag)片段实例,并检查它是否已添加到容器活动中。如果是,则使用抓取的EquationsResultatFragment片段实例调用EquationsResultatFragment片段的任何公共方法。

查看此link了解更多详情和示例代码。

答案 2 :(得分:-1)

试试这个!!

public void getResultat(float a, float b) {
     results.setText(((a * a) + (2 * a * b) + (b * b))+"");
}