【问题标题】:Disabling other buttons on the click of other Button单击其他按钮时禁用其他按钮
【发布时间】:2012-06-02 12:07:43
【问题描述】:

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

【问题讨论】:

  • 欢迎来到精彩绝伦的线程世界!您将希望将所有耗时的进程放在它们自己的线程中。这将允许您立即禁用按钮,从而消除致命异常。

标签: android android-button


【解决方案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;
             .........
         }
    }
};

【讨论】:

  • 你能指定我应该在哪里定义handleMessage函数>>
【解决方案2】:

如果您想在按钮 A 上执行 onClick() 操作时禁用按钮 B、C

btnA.setOnClickListerner(new OnClickListerner() {

public void onClick(){

btnB.setEnabled(false);

btnC.setEnabled(false);

}  

});

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

【讨论】:

  • 这不起作用.. srikanth .. 按钮没有被禁用.. 请指定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多