【问题标题】:Click event doesn't work and don't even show any error点击事件不起作用,甚至不显示任何错误
【发布时间】:2014-04-10 09:54:09
【问题描述】:

我想对两个数字进行求和,其值是通过单击 btnSum(Button) 从编辑文本中收集的。但是当我按下按钮时,什么也没有发生,我什至没有收到任何错误。

   public class MainActivity extends ActionBarActivity {
    Button btnsum,btnclear;
    EditText etno1,etno2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnsum=(Button)findViewById(R.id.editText1);
        btnclear=(Button)findViewById(R.id.editText2);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
        try
        {
            btnsum.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(arg0==btnclear)
                {
                    finish();
                }
                else
                {
    float no1 = Float.parseFloat( etno1.getText().toString());
    float no2 = Float.parseFloat( etno2.getText().toString());
    etno1.setText(Float.toString(no1+no2));
    }       
    }
        });
        }
        catch(Exception e)
        {

        }
    }

【问题讨论】:

  • 如果执行 else 部分,它应该会崩溃,因为未初始化编辑文本
  • @Raghunandan 它不会崩溃,因为整个代码都在 try catch 中。 @ YouandMe:也发布您的 xml,看来您的 id 也没有命名为组件
  • @user2450263 那里不需要尝试捕获。乍一看,我没有看到 try catch。你应该尝试 catch 这个float no1 = Float.parseFloat( etno1.getText().toString()); catch NumberFormatException。无论如何都不会初始化视图
  • :) 没有说它需要,实际上我不认为这是一个很好的编程习惯,但只是说“它应该崩溃”不会因为 try catch 而发生
  • @YouandMe 您的问题有 4 个答案已经尝试过,如果有任何工作,则将其标记为答案,如果不尝试向问题添加更多内容,例如 logcat 条目或发生错误。

标签: android onclicklistener buttonclick


【解决方案1】:

试试这个..

你还没有初始化EditTextetno1etno2。它应该crash你正在使用try catch,所以它不会强制关闭.而且您还没有使用e.printStackTrace();,因此logcat中不会打印错误。

尝试如下初始化

btnsum=(Button)findViewById(R.id.button1);
btnclear=(Button)findViewById(R.id.button2);

etno1=(EditText)findViewById(R.id.editText1);
etno2=(EditText)findViewById(R.id.editText2);

【讨论】:

    【解决方案2】:
    Please Intialize edit text
    
    public class MainActivity extends ActionBarActivity {
        Button btnsum,btnclear;
        EditText etno1,etno2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btnsum=(Button)findViewById(R.id.editText1);
            btnclear=(Button)findViewById(R.id.editText2);
    etno1=(EditText)findViewById(R.id.edittext1);//**edittext1 name your edit text**
    etno2=(EditText)findViewById(R.id.edittext2);//**edittext2 name your edit text****
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment())
                        .commit();
            }
            try
            {
                btnsum.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    if(arg0==btnclear)
                    {
                        finish();
                    }
                    else
                    {
        float no1 = Float.parseFloat( etno1.getText().toString());
        float no2 = Float.parseFloat( etno2.getText().toString());
        etno1.setText(Float.toString(no1+no2));
        }       
        }
            });
            }
            catch(Exception e)
            {
    
            }
        }
    

    【讨论】:

      【解决方案3】:

      你已经在你的代码中做到了:

      btnsum=(Button)findViewById(R.id.editText1);
      btnclear=(Button)findViewById(R.id.editText2);
      

      而我认为应该是:

      btnsum=(Button)findViewById(R.id.button1);
      btnclear=(Button)findViewById(R.id.button2);
      

      editText1=(EditText)findViewById(R.id.editText1);
      editText2=(EditText)findViewById(R.id.editText2);
      

      正确初始化你的资源......

      对于 OnClickListener 应该是这样的

      OnClickListener sumListener =  new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  //Your summation code goes here
              }
          };
          btnSum.setOnClickListener(sumListener);
      

      同样适用于 btnClear

          OnClickListener clearBtnListner =  new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  //Clear code goes here
              }
          };
          btnClear.setOnClickListener(clearBtnListner);   
      

      【讨论】:

        【解决方案4】:

        findViewById 中,buttons 与布局 xml 的edittext id 匹配,因此需要先修复它:

         ***Button*** btnsum,btnclear;
            ***EditText*** etno1,etno2;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                btnsum=(***Button***)findViewById***(R.id.editText1***);
                btnclear=(Button)findViewById(R.id.editText2);
        

        它不会崩溃为:

         try
                {
                    btnsum.setOnClickListener(new OnClickListener(){
                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        if(arg0==btnclear)
                        {  
        

        整个代码在try catch 中。

        什么都没有发生,因为:
        onClickListener for btnsum 中,您将view 参数与btnclear 匹配

        【讨论】:

          猜你喜欢
          • 2020-08-10
          • 1970-01-01
          • 2019-06-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          • 2017-09-25
          相关资源
          最近更新 更多