我的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;
}
}
}
答案 0 :(得分:0)
EquationsResultat
按钮后会调用<{getResultat
&#39; EquationsCalculFragment
,并应设置EquationsResultat
&#39; s TextView
(results
)文字。问题是,results
EquationsResultat
上设置了onCreateView
,似乎尚未调用此方法,因此results
仍然为空。< / p>
发布您的活动代码,您可以更轻松地了解何时附加碎片等。
答案 1 :(得分:0)
首先,您不能直接在不同的片段之间进行通信。您需要完成容器活动。
声明一个侦听器接口,您的片段将通过该接口与容器活动进行通信。将该听众附加到EquationsCalculFragment
。您的容器活动应该实现该侦听器。
现在,当您EquationsCalculFragment
想要与EquationsResultatFragment
通信时,您将使用该侦听器通知您的容器活动。在容器活动中,当您获得侦听器回调时,使用EquationsResultatFragment
或findFragmentById(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))+"");
}