2016-09-10 5 views
0

私は2つの簡単な電卓アプリを作成していますが、うまくいきます。私は、各タブの各アプリケーションコードを新しいアプリ(3つのタブを含むスワイプビュー)に配置したいと思っていました。アプリがインストールされていて、私は3つのタブに表示された方法を表示して&を開きます。各タブには2つのボタンがあります。 CLEAR &計算します。これらのボタン(ONCLICKイベントとJavaコードの計算に接続されている)をクリックすると、アプリケーションがクラッシュしています。同じコードが以前私が作成した2つの異なるアプリでもうまくいきます& AndroidスタジオでもJavaコードにエラーが表示されません。タブ付きスワイプビューの私のAndroid電卓アプリがクラッシュする

//mainAcitvity.javaコード

package com.example.siv.mahalaxmipetroleums; 

import android.support.design.widget.TabLayout; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 

import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link FragmentPagerAdapter} derivative, which will keep every 
    * loaded fragment in memory. If this becomes too memory intensive, it 
    * may be best to switch to a 
    * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
    */ 
    private SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    private ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(mViewPager); 

     } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     public PlaceholderFragment() { 
     } 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     /* @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_one, container, false); 
      TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
      textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 
     }*/ 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

     @Override 
     public Fragment getItem(int position) { 

      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 


      if (position == 0) { 
       return new DipToVol(); 
      } else if (position == 1) { 
       return new VolToDip(); 
      } else if (position ==2) 
       return new Temp_Density(); 
      else 
       return PlaceholderFragment.newInstance(position + 1); 

     } 
     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Dip-Vol"; 
       case 1: 
        return "Vol-Dip"; 
       case 2: 
        return "Temp-Dens"; 
      } 
      return null; 
     } 
    } 
} 

//タブ0(最初のタブ)のコード

package com.example.siv.mahalaxmipetroleums; 

     import android.os.Bundle; 
     import android.support.v4.app.Fragment; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.EditText; 
     import android.widget.TextView; 

public class DipToVol extends Fragment { 



     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_one, container, false); 
      return view; 
    } 


    public double calVol(short rad, short len, int height) { 
     double area; 
     area = (Math.PI * Math.pow(rad, 2)/2) - Math.pow(rad, 2) * Math.asin(1 - (height/(double)rad)) - (rad - height) * Math.sqrt(height * (2 * rad - height)); 
     return area*len*0.000001; 

    } 




    public void clickFun1 (View view) 
    { 
     int dipHSD = 0, dipMS = 0; 
     final short radHSD = 1219; 
     final short lenHSD = 6810; 
     final short radMS = 999; 
     final short lenMS = 6804; 
     double volHSD, volMS,volHSD1, volMS1; 

     EditText dipH = (EditText) view.findViewById(R.id.dipHSD1); 
     EditText dipM = (EditText) view.findViewById(R.id.dipMS1); 

     TextView volH = (TextView) view.findViewById(R.id.volHSD1); 
     TextView volM = (TextView) view.findViewById(R.id.volMS1); 
     try { 
      dipHSD = Integer.parseInt(dipH.getText().toString()); 
      volHSD = calVol(radHSD, lenHSD, dipHSD); 
      volHSD1 = Math.round(volHSD); 
      volH.setText(volHSD1 + ""); 
     } 
     catch (NumberFormatException e) { 
      volH.setText(""); 
     } 
     try{ dipMS = Integer.parseInt(dipM.getText().toString()); 
      volMS = calVol(radMS, lenMS, dipMS); 
      volMS1 = Math.round(volMS); 
      volM.setText(volMS1 + ""); 
     }catch(NumberFormatException e){volM.setText("");} 

    } 

    public void clearFun1(View view){ 
     EditText dipH = (EditText) view.findViewById(R.id.dipHSD1); 
     EditText dipM = (EditText) view.findViewById(R.id.dipMS1); 

     TextView volH = (TextView) view.findViewById(R.id.volHSD1); 
     TextView volM = (TextView) view.findViewById(R.id.volMS1); 

     volH.setText(""); 
     volM.setText(""); 
     dipH.setText(""); 
     dipM.setText(""); 
    } 




} 

//タブ1(2番目のタブ)のコード

package com.example.siv.mahalaxmipetroleums; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.TextView; 

public class VolToDip extends Fragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_two, container, false); 
     return view; 
    } 

    private class Liquid_Height{ 

     //final double radHSD = 121.9; 
     //final double lenHSD = 681.0; 
     //final double radMS = 99.9; 
     //final double lenMS = 680.4; 

     final double epsilon = 0.0001; 
     double dip,volume,radius,length; 

     // Inner Class 
     public Liquid_Height(double x, double y, double z){ 
      radius = x; 
      length = y; 
      volume = z; 

      double ratio,guess,dip1; 

      ratio = this.volume*1000/(radius*radius*length); 

      guess = 2*ratio/Math.PI; 

      dip1 = height(guess,ratio,epsilon); 

      dip = dip1*radius; 
     } 


     public double fun1(double x,double y){ 
      //here x is our guess or result which we try to improve upon, and y is ratio = V/R*R*L 
      return Math.acos(1-x) + Math.sqrt(x*(2-x))*(x-1) - y ; 
     } 
     public double fun2(double x){ 
      //here x is our guess or or result which we try to improve upon. 
      return 2*Math.sqrt(x*(2-x)); 
     } 
     public boolean isGoodEnough(double x,double y,double e){ 
      //here x is our guess or result which we try to improve upon, and y is ratio = V/R*R*L and e is epsilon 
      return Math.abs((Math.acos (1-x) + Math.sqrt(x*(2-x))*(x-1) - y)/y)> e; 
     } 

     public double height(double a,double b,double c){ 
      //here a is our guess or result which we try to improve upon, and b is ratio = V/R*R*L and c is epsilon 
      while (isGoodEnough(a,b,c)){ 
       a = a - fun1(a,b)/fun2(a); 
      } 

      return a; 
     } 

     public double getDip(){return dip;} 



    } //Inner class ends here 

    public void clickFun2 (View view) 
    { 
     EditText volH = (EditText) view.findViewById(R.id.volHSD2); 
     EditText volM = (EditText) view.findViewById(R.id.volMS2); 

     TextView dipH = (TextView) view.findViewById(R.id.dipHSD2); 
     TextView dipM = (TextView) view.findViewById(R.id.dipMS2); 

     double volHSD = 0, volMS = 0; 
     final double radHSD = 121.9; 
     final double lenHSD = 681.0; 
     final double radMS = 99.9; 
     final double lenMS = 680.4; 
     double dipHSD, dipMS; 


     try { 
      volHSD = Double.parseDouble(volH.getText().toString()); 
      Liquid_Height HSD = new Liquid_Height(radHSD,lenHSD,volHSD); 
      dipHSD = Math.round(HSD.getDip()*10.0)/10.0; 
      dipH.setText(dipHSD + ""); 
     } 
     catch (NumberFormatException e) { 
      dipH.setText(""); 
     } 
     try{ volMS = Double.parseDouble(volM.getText().toString()); 
      Liquid_Height MS = new Liquid_Height(radMS,lenMS,volMS); 
      dipMS = Math.round(MS.getDip()*10.0)/10.0; 
      dipM.setText(dipMS + ""); 
     } 
     catch(NumberFormatException e){ 
      dipM.setText(""); 
     } 

    } 

    public void clearFun2(View view){ 
     EditText volH = (EditText) view.findViewById(R.id.volHSD2); 
     EditText volM = (EditText) view.findViewById(R.id.volMS2); 

     TextView dipH = (TextView) view.findViewById(R.id.dipHSD2); 
     TextView dipM = (TextView) view.findViewById(R.id.dipMS2); 

     volH.setText(""); 
     volM.setText(""); 
     dipH.setText(""); 
     dipM.setText(""); 
    } 
} 

//タブ2のコード(3番目のタブ) - このコードはあまりありません。ビューを作成するためのコード。こんにちは世界の表示。いずれかがその中にバグを見つけることができるしてください私のコード

09-10 13:49:24.823 2718-2718/com.example.siv.mahalaxmipetroleums E/AndroidRuntime: FATAL EXCEPTION: main 
                        java.lang.IllegalStateException: Could not find method clickFun1(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'calcBtn' 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                         at android.view.View.performClick(View.java:4240) 
                         at android.view.View$PerformClick.run(View.java:17721) 
                         at android.os.Handler.handleCallback(Handler.java:730) 
                         at android.os.Handler.dispatchMessage(Handler.java:92) 
                         at android.os.Looper.loop(Looper.java:137) 
                         at android.app.ActivityThread.main(ActivityThread.java:5103) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:525) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                         at dalvik.system.NativeStart.main(Native Method) 

でエラーを引用

//シンプルなログ猫?

+1

完全なプロジェクトを投稿するのではなく、** logcat **を投稿してください。もっと便利です。 –

+0

私のラップトップのRAMのサイズが小さいため、私はエミュレータでそれを実行していません。私はアンドロイドの携帯電話にアプリをコピーし、私はそれを実行します。電話でlogcatを見つける方法はありますか? –

+0

logcatは同じ場所に表示されます。とにかく、物理的なデバイス上で開発することは実際には悪い習慣です。これは、リリース前の最終テストにのみ使用してください。 –

答えて

2
java.lang.IllegalStateException: Could not find method clickFun1(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'calcBtn' 

あなたはclickFun1方法を参考に、属性を持つレイアウトを持っています。その名前であなたの活動には方法がありません。 です。あなたのフラグメントの1つにその名前のメソッドがありますが、標準のロジックではそれが見つかりません。これに対処するための

のオプションが含ま:

  • ではなく、あなたのフラグメントには、このボタンを

  • OnClickListenerを登録し、属性を削除するなど、ビジネスロジックを移動し、フラグメントを取り除きますこのclickFun1()メソッド、アクティビティへ

  • the data binding libraryを使用して属性をあなたのフラグメント

あなたがAndroid開発を初めてお使いの場合は、最初のオプションをお勧めします。

関連する問題