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 但不会导致它挂起的后台线程上。