2017-07-29 5 views
0

私はアンドロイドで簡単な電卓を作ろうとしています。Android onClickメソッドエラー

詳細:

私は複数のボタンがあり、ボタンのすべてのビューでのonClickメソッドを設定しています。私はスイッチのステートメントで個人のIDを取得します。テスト目的のために、パーセントボタンをクリック可能にして、EditTextにボタンのテキストを表示しようとしました。

しかし、私はボタンをクリックすると、アプリの亀裂。

これは私のコードです:

public class MainActivity extends Activity { 

    Button show_cam_ctrl, 
      show_voice_ctrl, 
      cal_btn_clear, 
      cal_btn_del, 
      cal_btn_percent, 
      cal_btn_divide, 
      cal_btn_plus, 
      cal_btn_pi, 
      cal_btn_root, 
      cal_btn_dot, 
      cal_btn_equal, 
      cal_btn_power, 
      cal_btn_ptrl, 
      cal_btn_sin, cal_btn_cos, cal_btn_tan, 
      cal_btn_sinIn, cal_btn_cosIn, cal_btn_tanIn, 
      cal_btn_0, cal_btn_1, cal_btn_2, cal_btn_3, cal_btn_4, cal_btn_5, cal_btn_6, cal_btn_7, cal_btn_8, cal_btn_9; 

    TextView ma_res_txt; 

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

     //Control Buttons 
     show_cam_ctrl = (Button) findViewById(R.id.show_cam_ctrl); 
     show_voice_ctrl = (Button) findViewById(R.id.show_voice_ctrl); 

     show_cam_ctrl.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(MainActivity.this,cam_calculator.class); 
       startActivity(i); 
      } 
     }); 
     show_voice_ctrl.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(MainActivity.this,voice_calculator.class); 
       startActivity(i); 
      } 
     }); 


    } 

    //Calculator main page logic 

    public void calculate(View v){ 

     ma_res_txt = (TextView) findViewById(R.id.ma_res_txt); 
     String t; 
     int length = ma_res_txt.getText().length(); 

     switch (v.getId()){ 


      case R.id.cal_btn_clear:{ 
       ma_res_txt.setText(""); 
       break; 
      } 
      case R.id.cal_btn_del:{ 
       String text = ma_res_txt.getText().toString(); 
       ma_res_txt.setText(text.substring(0, text.length() - 1)); 
      } 


      case R.id.cal_btn_percent:{ 
       t = "%"; 
       ma_res_txt.setText(t); 
       break; 
      } 


     } 

    } 






    @Override 
    public void finish() { 
     super.finish(); 
    } 




} 

logcat:

7月29日12:19:10.734 27279から27279/com.example.nadeemahmad.smartcalculator E/AndroidRuntime : 致命的除外:メイン プロセス:com.example.nadeemahmad.smartcalculator、PID:27279 java.lang.IllegalStat eException:アンドロイドの親や先祖コンテキスト方法 計算()(ビュー)を見つけることができませんでした:ID 「cal_btn_percent」 とビュークラスandroid.widget.Buttonに定義されているのonClick 属性 android.view.View $ DeclaredOnClickListenerで.resolveMethod(View.java:5076) android.view.View $ DeclaredOnClickListener.onClick(View.java:5035) at android.view.View.performClick(View.java:6205) android.widget.TextView .performClick(TextView.java:11103) android.view.View $ PerformClick.run(View.java:23653) android.os.Handler.handleCallback (Handler.java:751) (android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread .javaファイル:6682)com.android.internalで com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1520) でjava.lang.reflect.Method.invoke(ネイティブメソッド) で .os.ZygoteInit.main(ZygoteInit.java:1410)

答えて

1

onClickでcalculate()を追加した場合は、xmlボタンのコードを確認してください。 N

<Button android:id="@+id/cal_btn_percent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="calculate" /> 
+0

ありがとう、これはエラーです –

1

show_cam_ctrl = (Button) findViewById(R.id.show_cam_ctrl); 

ようなすべてのボタンのIDを定義し、コード以下のような特定のボタンのクリックイベントに特定の機能を定義する)(削除を変更する)(

<Button 
    android:id="@+id/cal_btn_percent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="calculate()" /> 

を除去します。

show_cam_ctrl.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     calculate(); 
     } 
    }); 

そして、onCreate()メソッドの外で特定の機能をコードする。