ProgressBar没有显示,android

时间:2017-01-10 21:42:43

标签: android android-progressbar

这是我的代码:

    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)放在顶部,为什么它只在所有代码完成后执行,有时需要几秒钟。

非常感谢。

1 个答案:

答案 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,但不会导致它挂起。