在我的应用程序中,我有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时,应用程序强制关闭..可以帮助吗?
答案 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得到禁用。