public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
progressDialog = new ProgressDialog(getActivity());
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("로딩중");
progressDialog.show();
View view = inflater.inflate(R.layout.boxoffice,null);
뷰가생성되면 프로그레스바가 동작하게 설정했습니다.
그리고 스레드 부분
Runnable task = new Runnable() {
@Override
public void run() {
getImgLink(url);
getOpenday(url);
getData(url);
getOpenMovday(url);
getPeoples(url);
getMoney(url);
getLink(url); -요부분은 제가 데이터 받아오는 부분(html 파싱)
confirmHandler.sendEmptyMessage(1); // 핸들러에 메세지를 주기위해서
}
};
thread = new Thread(task);
thread.start();
try {
thread.join();
} catch (Exception e) {
}
여기서 핸들러로 신호를 줬습니다.
그리고 핸들러에서 받아와서
private Handler confirmHandler = new Handler(){
@Override
public void handleMessage(Message msg){
if (msg.what==1){
Toast.makeText(getActivity(), "첫번째 데이터를 받아왔습니다.", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}
};
이렇게해서 프로그레스바를 없애고, toast로 데이터를 다 받아온걸 확인을 합니다.
그런데 이렇게 할 경우 제가 보니
당연히 오류는 안납니다
그치만 프로그레스바가 나오질 않습니다.
그이유를 알아보니
이 화면(즉 해당되는 Fragment ) 이 실행될때 html파싱을 먼저 다 한후에
화면을 표시해버립니다.....
즉 제가원하는건
데이터를 받아오는동안 프로그레스바를 실행시키는건데
여기서는 화면이 나오기전에 데이터를 받아와버리고
(그동안은 잠시멈춥니다.. 데이터받는시간)
다 받아오면 화면을 보여주니 프로그레스바가 보일 시간이 없는겁니다...ㅠㅠ
지금 탭이 4개로 구성되어 있는데
탭1에만 파싱을 해놨습니다.
탭4에서 탭1을 클릭해서 넘어갈때도
역시나 화면이 잠깐 멈추고 데이터를 다 파싱해온뒤에
해당화면으로 넘어갑니다...
이러니 프로그레스바가 보일지 않습니다....
(화면이 뜨는순간은 이미 데이터를 다 받아왔기 때문에 프로그레스바를 종료시켜버립니다.)
제가 원하는건 화면이 먼저뜨고난뒤 데이터를 받아오고 그시간동안 프로그레스바는 동작하고 데이터를 다 받아오면 프로그레스바를 종료하는겁니다...ㅠㅠ
설명이 길었는데 어떻게 안될까요?ㅠㅠ
힘드네요 ㅠㅠ
그리고 혹시나 화면이 먼저 나오고나서
스레드를 딜레이시켜서 하면 되지 않을까 싶어서
thread.sleep 도 해봤지만,
역시나 같은 증상 나타나고 그냥 화면나오는시간만 딜레이 됩니다...;
10초 딜레이시키면 데이터를 못받아오니 10초동안 딜레이됬다가 데이터받아와서
listview에 뿌려주면서 화면이 나타나더군요...ㅠㅠ
이게 도저히 불가능한건가요....;;;;;;ㅠㅠㅠㅠㅠ