单击其他按钮时禁用其他按钮

时间:2012-05-28 04:21:49

标签: android android-button

在我的应用程序中,我有3个按钮A,B,C。按下按钮A,我正在做一些需要一些时间的计算......在那个时期,我想禁用其他两个按钮。我正在为一个按钮提供onClick监听器的代码..

case R.id.buttona:

    //Disabling other two buttons
    start1b.setVisibility(v.INVISIBLE);
    start1c.setVisibility(v.INVISIBLE);
    stop1.setVisibility(v.INVISIBLE);

        //this is the process that takes time 
    String x ="/databank/Reading18.wav";
    timedata1a = fe.returningtimedata(x);

    rawdata1a = fe.returningrawdata(x); 
    Log.d("now press", "button");

    //features of Reading 1 hav been extracted into timedata1a 
    start1b.setVisibility(v.VISIBLE);
    start1c.setVisibility(v.VISIBLE);
    stop1.setVisibility(v.VISIBLE);

break;

但是当我按下1个按钮A然后立即按下按钮B时,应用程序强制关闭..可以帮助吗?

2 个答案:

答案 0 :(得分:1)

您需要在UI之外的其他线程中执行要在禁用状态下执行的操作。因为事件线程永远不会有时间禁用按钮。所以你可以这样做:

case R.id.buttona:

    //Disabling other two buttons
    start1b.setVisibility(v.INVISIBLE);
    start1c.setVisibility(v.INVISIBLE);
    stop1.setVisibility(v.INVISIBLE);

     Thread thread=new Thread()
     {
        public void run()
        {

                 //this is the process that takes time 
                  String x ="/databank/Reading18.wav";
                  timedata1a = fe.returningtimedata(x);

                 rawdata1a = fe.returningrawdata(x); 
                 Log.d("now press", "button");
                 handler.sendEmptyMessage(1);



          }
       }
       thread.start();
       break;
    }

您需要定义一个处理程序,以便在线程处理完成后将结果发布回UI线程。

Handler handler=new Handler();
{
    public void handleMessage(Message msg)
    {
         int what=msg.what;
         switch(what)
         { 
            case 1:
                  {
                       //features of Reading 1 hav been extracted into timedata1a 
                     start1b.setVisibility(v.VISIBLE);
                     start1c.setVisibility(v.VISIBLE);
                     stop1.setVisibility(v.VISIBLE);
                  }
                  break;
             .........
         }
    }
};

答案 1 :(得分:0)

在您的情况下,如果要在按钮A上执行onClick()操作时禁用按钮B,C

btnA.setOnClickListerner(new OnClickListerner() {

public void onClick(){

btnB.setEnabled(false);

btnC.setEnabled(false);

}  

});

在上面的代码中单击按钮A按钮B,C得到禁用。