这是我的代码:
automaticCountryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar.setVisibility(View.VISIBLE);
if (ContextCompat.checkSelfPermission(HomeActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED){
setUpLocationPermission();
return;
}
Log.d(TAG, String.valueOf(gps.canGetLocation()));
Log.d(TAG, String.valueOf(gps.getLocation()));
Log.d(TAG, String.valueOf(gps.getLatitude()));
Log.d(TAG, String.valueOf(gps.getLongitude()));
Geocoder myLocation = new Geocoder(HomeActivity.this);
try
{
myList = myLocation.getFromLocation(gps.getLatitude(), gps.getLongitude(), 1);
}
catch (Exception e)
{
Log.d(TAG, "unable");
e.printStackTrace();
}
if(myList != null) {
try {
String country = myList.get(0).getCountryName();
Log.d(TAG, country);
findCountryInArrayList(country);
}
catch (Exception e)
{
Toast.makeText(HomeActivity.this, "Didn't manage to automatically detect location.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
});
}
我想在点击视图后立即显示进度条。但是,在所有代码完成之前,它都不会变得可见,这与整个问题相反。 为什么在点击开始时没有发生这种情况?我已将progressBar.setVisibility(View.VISIBLE)放在顶部,为什么它只在所有代码完成后执行,有时需要几秒钟。
非常感谢。
答案 0 :(得分:2)
这是因为您正在尝试在UI线程上完成工作 - 在此方法完成之前,UI根本不会实际更新。
尝试更改您的电话:
public void onClick(View view) {
progressBar.setVisibility(View.VISIBLE);
progressBar.post( new Runnable() {
public void run() {
// long running code that has UI interactions
}
});
}
这将立即显示视图,并将runnable - 长时间运行的任务提交给消息队列;此任务将在后台线程上运行,后台线程仍然可以操作UI,但不会导致它挂起。