2016-06-28 2 views
0

상황안드로이드해서 ProgressDialog

내가 구글에 대한 물건을 많이 읽고있다하지만 난 여전히 내 문제를 해결할 수없는 표시 할 수 없습니다. 일단 버튼을 누르면 출력을 표시하기 전에 많은 작업을 실행해야하는 앱이 있습니다. 나는 다음과 같이 진행 대화 상자를 표시하려면 :

enter image description here

아주 쉽게, 왼쪽에 왼쪽과 텍스트 "결과를 계산 ..."에 이동 원.


문제

나는 다음과 같은 코드를 가지고 : 나는 말 (일부 숫자와 문자)에서 올바른 결과를 볼 수 있기 때문에

public class fragmentMetodoTangenti extends Fragment { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    final View view = inflater.inflate(R.layout.fragment_metodo_tangenti, container, false); 

    Button button = (Button) view.findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() { 

    @Override 
     public void onClick(View v) { 


     try { 

      loading = new ProgressDialog(view.getContext()); 
      loading.setCancelable(true); 
      loading.setMessage("Calculating results..."); 
      loading.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      loading.show(); 

      //other "heavy" code here (a lot of for and while loops) 

      loading.dismiss(); 

     } catch (Exception e) { 
      //catching the error 
     } 


    }); 

    //return the view 
    return view; 

} 

} 

코드는 완벽하게 작동합니다. 유일한 문제는 단추를 클릭 할 때 내부의 회 전자와 함께 진행 대화 상자를 볼 수 없다는 것입니다.

나는 문제가 new ProgressDialog(view.getContext()); 일 수 있다고 생각하지만 확실하지 않습니다. Android Studio 최신 버전을 사용하고 있습니다.

어떻게 해결할 수 있습니까?

LOG HERE

+0

로그에 메시지가 있습니까? –

+0

예 질문에도 http://pastebin.com/d8sxrnTE를 추가했습니다. 어떤 이유로 mView == null이라고 말합니다. –

답변

0

온 클릭 콜백이 스레드에 "무거운"작업을 수행하지 않아야 부드러운 UI를 유지하기 위해, UI 스레드에서 호출됩니다.

이 경우 과장 될 수 있지만 https://github.com/ReactiveX/RxAndroid을 살펴 봐야합니다. 신뢰 나, 작업 RxJava/RxAndroid를 사용의 이점이 많이있다,이 경우 당신은 수행하여 문제를 해결할 수 :

public void OnClick(View v) { 
    Observable.defer(() -> heavyTask()) 
       .observeOn(Schedulers.computation()) 
       .subscribeOn(AndroidSchedulers.mainThread()) 
       .doOnSubscribe(() -> showProgressBar()) 
       .doOnCompleted(() -> hideProgressBar()) 
       .subscribe(); 
} 

그것은 시작에 하드,하지만 당신이 정말로 깔끔한 코드와 끝까지 .

또는 이러한 종류의 문제에 대한 표준 솔루션 인 AsyncTask 클래스를 살펴볼 수도 있습니다. 여기에 샘플을 찾을 수 있습니다 Download a file with Android, and showing the progress in a ProgressDialog

+0

무엇을 위해 지연 사용이 필요합니까? – paul