2012-12-27 2 views
0

ProgressBar에 문제가 있습니다. 이전에 진행률 막대를 사용하여이 문제가 발생하지 않았습니다.실행 후 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를이 화면에 AsyncTask를 작성하기 전에되고 심지어는, setVisible 라인을 표시하지 않습니다.

왜 이런 일이 일어나는 지 알고 싶습니다.

감사합니다.

+0

왜 보이지 않게 설정 하시겠습니까? – codeMagic

답변

1

/기각 숨겨야합니다 :

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

execute는 백그라운드에서 작업을 시작하지만 get()을 호출하면 실행이 완료 될 때까지 기다린 다음 결과를 반환합니다. 따라서 AsyncTask가 끝날 때까지이 줄에서 코드가 대기하고 get 호출로 메인 스레드를 차단했기 때문에 진행 표시 줄이 표시됩니다.

AsyncTask에서 execute 메서드를 호출 한 다음 AsyncTask의 onPostExecute 메서드를 사용하여 실행이 끝날 때 수행해야 할 작업을 수행해야합니다.

+0

그것은 일했다! 고맙습니다. – vdlow

0

AsyncTask를 onPre ... GUI의 threead에서 실행하며 AsyncTask를 onPost이 너무 GUI 스레드에서 실행됩니다 표시됩니다하고 probelm이 라인이다