ProgressBar 未显示,android
ProgressBar not showing, android
这是我的代码:
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)放在最上面了,为什么是所有代码都执行完才执行,有时需要几秒
非常感谢。
这是因为您正在尝试在 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
}
});
}
这将立即显示视图,并将 运行nable - long 运行ning 任务 - 提交到消息队列;此任务将 运行 在仍然可以操作 UI 但不会导致它挂起的后台线程上。
这是我的代码:
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)放在最上面了,为什么是所有代码都执行完才执行,有时需要几秒
非常感谢。
这是因为您正在尝试在 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
}
});
}
这将立即显示视图,并将 运行nable - long 运行ning 任务 - 提交到消息队列;此任务将 运行 在仍然可以操作 UI 但不会导致它挂起的后台线程上。