başka

2016-04-13 10 views
0

Benim EditText bir parçasından EditText değerini Kurtar benim fragmanda adlandırılır: EquationsResultat.javabaşka

Ben iki tane NullPointerException ile vardır: EquationsCalculFragment.java Ben adında benim fragmanında değerini kurtarmak istediğiniz görünür neden yok (doğrudan koddaki yorumlara bakın). NB: EquationsResultsFragment'teki hata için, Float.parseFloat() ile birlikte String.valueOf() ile birleştirmeyi denedim, ancak ikisi birlikte çalıştı.

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; 
     } 
    } 

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) } } 

EquationsResultat.java

Ben bu büyük bir sorun olmadığını düşünüyorum, bana yardımcı olabilir umuyoruz.

Veli Etkinlik: TabFragment.java(evet benim uygulaması bir TabLayout ve ViewPager ile çalışan si) ler düğmeye

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

Sonuçlara (TextView) erişmeye çalışıyorsunuz ancak EquationsResultatFragment'in görünümü henüz oluşturulmadı. –

+0

Yani, ne zaman getResultat (...) yöntemini çağırmalıyım? – Slabre

+0

Bence bu şekilde şeyler yapmak için iyi bir yaklaşım değil, Daha tutarlı bir şekilde ebeveyn aktivitesini fragmanlar arasındaki veriyi iletmek için bir arabirim olarak kullanın. –

cevap

0

Öncelikle, doğrudan farklı fragmanlar arasında iletişim kuramaz, vb parçaları takılarak zaman bilerek yardım etmek daha kolay olacaktır. Bunun için konteyner aktivitenizden geçmeniz gerekiyor.

Parçanızın kapsayıcı etkinliğinizle iletişim kuracağı bir dinleyici arabirimini bildirin. Bu dinleyiciyi EquationsCalculFragment'a ekleyin. Kapsayıcı etkinliğiniz bu dinleyiciyi uygulamalıdır. EquationsCalculFragmentEquationsResultatFragment ile iletişim kurmak istediğinizde, kapsayıcı etkinliğinizi bu dinleyiciyi kullanarak bilgilendirirsiniz. Kapsayıcı etkinliğinde, dinleyici geri aramasını aldığınızda, findFragmentById(int id) veya findFragmentByTag(String tag) kullanarak EquationsResultatFragment parça örneğinizi alın ve kapsayıcı etkinliğinize önceden eklenip eklenmediğini kontrol edin. Eğer öyleyse, o zaman EquationsResultatFragment parçasının herhangi bir genel yöntemini çağırarak, bu EquationsResultatFragment parça örneğini yakaladı.

Daha fazla bilgi ve örnek kod için bu link'a bakın.

+0

Gönderiyi ana etkinlik kodumla düzenledim. Sekmeler olduklarından, EquationsCalculFragment'e (ilk sekme) ulaştığımda parçalarımın zaten oluşturulduğunu düşünüyorum. Zaten bir dinleyici arabirimi ayarlamam gerektiğini düşünüyor musunuz? – Slabre

+0

İlk önce, Etkinlik ile Parçacık arasındaki farkı anlamanız gerekir. TabFragment.java bir Etkinlik değil bir parçasıdır. "Zaten bir dinleyici arabirimi ayarlamam gerekiyor mu?" - Evet. –

+0

TabFragment'te bir dinleyici ayarlıyorum ve şimdi iyi çalışıyor, teşekkürler. Bu sorunu yaşayan diğer kişiler için, kullanmadan önce "Fragmanı B" nizi oluşturmaya özen gösterin. – Slabre

0

EquationsResultat 'Eğer EquationsCalculFragment tıkladığınızda lar getResultat denir' ve belirlesin EquationsResultat 'un TextView (results) metni. Sorun, results'un EquationsResultat'un onCreateView üzerinde ayarlanmış olması ve bu yöntemin henüz çağrılmadığı ve bu nedenle results hala boş olduğu anlaşılıyor.

Post activitie kod, hepsinden

+0

Gönderiyi ana etkinlik kodumla düzenledim. Sekmeler olduklarından, EquationsCalculFragment'e (ilk sekme) ulaştığımda parçalarımın zaten oluşturulduğunu düşünüyorum. – Slabre

-1

Bunu deneyin!

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