0

私のアプリケーションでは、3つのボタンA、B、Cがあります。ボタンAを押すと、時間がかかる計算を行っています...その期間に、他の2つのボタンを無効にします。1つのボタンの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 に答える