【问题标题】:Android onClick method errorAndroid onClick 方法错误
【发布时间】:2017-07-29 07:24:17
【问题描述】:

我正在尝试在 android 中制作一个简单的计算器。

详情:

我有多个按钮,并且在所有按钮视图中都设置了 onClick 方法。我所做的是通过 switch 语句获取个人的 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:

07-29 12:19:10.734 27279-27279/com.example.nadeemahmad.smartcalculator E/AndroidRuntime: 致命例外:主要 进程:com.example.nadeemahmad.smartcalculator,PID:27279 java.lang.IllegalStateException:找不到方法 android:onClick 的父或祖先上下文中的计算()(视图) 在视图类 android.widget.Button 上定义的属性,带有 id 'cal_btn_percent' 在 android.view.View$DeclaredOnClickListener.resolveMethod(View.java:5076) 在 android.view.View$DeclaredOnClickListener.onClick(View.java:5035) 在 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) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6682) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您在 onClick 中添加了 calculate() 然后删除 (),请检查您的 xml 按钮代码

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

    改变remove()

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

    【讨论】:

      【解决方案2】:

      定义所有按钮的id,如

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

      然后在特定的按钮单击事件中定义特定的功能,如下面的代码;

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

      然后在 onCreate() 方法之外为特定函数编写代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        相关资源
        最近更新 更多