0

在我的应用程序中,我有 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 时,应用力关闭.. any1 可以帮忙吗?

4

2 回答 2

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;
             .........
         }
    }
};
于 2012-05-28T04:50:20.547 回答
0

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

btnA.setOnClickListerner(new OnClickListerner() {

public void onClick(){

btnB.setEnabled(false);

btnC.setEnabled(false);

}  

});

在上面的代码中,当您单击按钮 A 时,按钮 B、C 被禁用。

于 2012-05-28T04:40:21.287 回答