ProgressBar执行后显示

时间:2012-12-27 21:58:30

标签: android android-layout

我遇到了ProgressBar的问题。我之前使用过进度条,从来没有遇到过这个问题。

我有一个按钮,一旦点击,就会运行一个asynctask,这可能需要很长时间才能完成。因此,我设置了一个ProgressBar来显示单击按钮的时间。代码就是这个:

Button btnFollowing = (Button) findViewById(R.id.btnFollowing);

    final ProgressBar pbFollowing = (ProgressBar) findViewById(R.id.progressBarFollowing);

    btnFollowing.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            pbFollowing.setVisibility(View.VISIBLE);
            ArrayList<String> friends = new ArrayList<String>();
            try {                   
                GetFriends gf = new GetFriends(MainActivity.this);
                friends = gf.execute("value").get();        
            } catch (InterruptedException e) {
                Log.e("Exception MainActivity gettingfriends", e.toString());
            } catch (ExecutionException e) {
                Log.e("Exception MainActivity gettingfriends", e.toString());
            }
            setStringArrayPref(MainActivity.this, "friends", friends);
            pbFollowing.setVisibility(View.INVISIBLE);
        }
    });

问题是,在AsyncTask结束之前,ProgressBar不会出现在屏幕上,即使setVisible行在AsyncTask创建之前也是如此。

有关为何发生这种情况的任何想法?

感谢您的建议!

2 个答案:

答案 0 :(得分:1)

问题出在这一行:

friends = gf.execute("value").get(); 

执行将在后台启动任务,但是在其上调用get()将等待执行完成然后返回结果。因此,您的代码将在此行中等待,直到AsyncTask结束,之后您的进度条将变为可见,因为您使用get调用阻止了主线程。

您应该在AsyncTask上调用execute方法,然后使用AsyncTask的onPostExecute来执行您在执行结束时需要执行的操作。

答案 1 :(得分:0)

AsyncTask onPre ...将在GUI threead上运行,它将显示出来 AsyncTask onPost也将在gui线程上运行,你应该解除/隐藏