我做了一个按钮,它调用了刷新方法:
... android:onClick="refresh"
在方法的开头我设置了这些:
btn.setEnabled(false);
btn.setClickable(false);
最后我将enable和clickable设置为true。 我的问题是,在程序运行并且按钮被禁用后第一次单击后,我单击按钮例如3次。交易结束后,它会再次自动启动3次。所以setEnabled(false)不起作用。 谁能告诉我为什么? THX。
所以我的布局中只有一个按钮:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_gravity="center_horizontal"
android:onClick="refresh"
android:text="Refresh"
android:textStyle="bold"
android:background="@drawable/button"
/>
以下是方法:
public void refresh(View view){
btn.setEnabled(false);
btn.setClickable(false);
final double currentLat = lat;
final double currentLng = lng;
if(isOnline == true) {
String link = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+currentLat+","+currentLng+"&sensor=true&language=hu";
final GetLocation si = (GetLocation) new GetLocation(this, link).execute();
Runnable runnable = new Runnable() {
public void run() {
handler.post(new Runnable() {
public void run() {
Thread.currentThread();
try {
Thread.sleep(3000);
if(si.getAddress() != null) {
address.setText(si.getAddress());
}
String date = DateFormat.getDateTimeInstance().format(new Date());
String data = date+": ["+currentLat+", "+currentLng+"] - "+si.getAddress()+"\n";
FileManagement f = new FileManagement(filename);
f.writeToFile(data);
btn.setEnabled(true);
btn.setClickable(true);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
});
}
};
new Thread(runnable).start();
}
}
答案 0 :(得分:0)
我的建议是在代码中使用onClickListener而不是声明
android:onClick="refresh"
如果你声明onClickListener,你将能够在拦截onClick事件时记录;)
答案 1 :(得分:0)
可能在您的应用程序中,主线程中的长任务阻止UI和点击事件在UI解锁后出现。
单击按钮后,您应该:
答案 2 :(得分:0)
在类中的某个地方定义一个AtomicBoolean变量。
private AtomicBoolean tokenTaken = new AtomicBoolean();
在按钮中单击侦听器,将atomic变量设置为true。
public void refresh(View view){
if(!tokenTaken.compareAndSet(false,true))
return;
...//Rest of your code.
//set the token false when you want to enable the button.
tokenTaken.set(false);
}
参考: https://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean