0

내용이 표시 될 준비가 될 때까지 ListView까지 순환하는 불확실한 progressBar이 있습니다. progressBarlistView은 모두 Fragment의 일부입니다.ListView의 일부가 아닌 indeterminante ProgressBar를 제어하는 ​​방법은 무엇입니까?

그래서이 progressBar은 콘텐츠를 가져 오는 AsyncTask에서 Visisble and Gone으로 코딩되었다고 코딩했습니다. progressBar가 동결되고를 회전하지 않습니다 그러나

mProgressBar = (ProgressBar) view.findViewById(R.id.progressbar); 
mProgressBar.getIndeterminateDrawable() 
      .setColorFilter(getResources().getColor(R.color.pink), PorterDuff.Mode.MULTIPLY); 

new MyAsyncTask().execute(); 

//then in asynctask 
private class MyAsyncTask extends AsyncTask<Void, Integer, MyAdapter> { 
    @Override 
    protected void onPreExecute() { 
     mProgressBar.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected MyAdapter doInBackground(Void... params) { 
     //do the stuff and return loaded adapter 

     return adapter; 
    } 

    @Override 
    protected void onPostExecute(MyAdapter adapter) { 
     mProgressBar.setVisibility(View.GONE); 
    } 
} 

?!

onPreExecute에서 progressBar을 인스턴스화하려고 시도했지만 바깥 쪽 progressBar은 내가 AsyncTask에 설정된 매개 변수를 허용하지 않습니다. 나는 그것이 관습과 함께 기본 색으로 나타나기 때문에 그것을 볼 수있다.

어떻게 제어 할 수 있습니까? progressBar? 지금 당장 필요한 것은 콘텐츠가로드되기 시작할 때 표시하고 표시 준비가되면 숨길 수있는 것입니다.

참고 : 각 항목에는 progressBar이 필요하지 않지만 설명이 필요합니다.

답변

0

MyAsyncTask에 대한 생성자를 만들고 매개 변수로 progressBar를 지정 했습니까?

개인 속성은 다른 Java 클래스와 같이 내부에 저장할 수 있습니다.

EDIT : 사용자 지정 처리기를 정의하고 progressBar의 가시성을 가지고 작업하면서이 호출을 호출합니다.

public final class LoadingDialogHandler extends Handler { 
    private final WeakReference<Activity> mActivity; 
    // Constants for Hiding/Showing Loading dialog 
    public static final int HIDE_LOADING_DIALOG = 0; 
    public static final int SHOW_LOADING_DIALOG = 1; 

    private View mLoadingDialogContainer; 

    public LoadingDialogHandler(Activity activity, View container) { 
     mActivity = new WeakReference<Activity>(activity); 
     mLoadingDialogContainer = container; 
    } 

    public void handleMessage(Message msg) { 
     Activity activity = mActivity.get(); 
     if (activity == null) { 
      return; 
     } 
     if (msg.what == SHOW_LOADING_DIALOG) { 
      mLoadingDialogContainer.setVisibility(View.VISIBLE); 

     } else if (msg.what == HIDE_LOADING_DIALOG) { 
      mLoadingDialogContainer.setVisibility(View.GONE); 
     } 
    } 

}

그리고 다음과 같이 호출 : 샘플 (

LoadingDialogHandler loadingDialogHandler = new LoadingDialogHandler(yourActivity, findViewById(R.id.loading_indicator)); 

이/숨기기를 표시하려면 다음이 동료에게 진행 표시 줄을 처리 선언 활동/조각에서

게재 중) :

loadingDialogHandler.sendEmptyMessage(LoadingDialogHandler.SHOW); 

추신 : 아마 당신은이 같은 UIthread에서 실행해야합니다 :

mProgressBar = (ProgressBar) view.findViewById(R.id.progressbar); 
listView.setEmptyView(mProgressBar); 

을 수행 : 그 함수에 대한 내장 API가있다

그렇게 간단입니다
activity.runOnUiThread(new Runnable() { 
       public void run() { 
        //update progressBar 
       } 
      }); 
+0

제가 해냈습니다. 그러나 'ProgressBar'는 여전히 회전하지 않습니다. 얼어 붙은 것 같습니다. 진행률 표시 줄을 업데이트하지 않습니다. 그것은 불확정 진도 바입니다. – sandalone

+0

내 대답을 편집했습니다. 지금 도움이되기를 바랍니다.) –

+0

다른 프로젝트에서 사용할 좋은 아이디어이지만 ProgressBAr은 여전히 ​​고정되어 있습니다. – sandalone

0

! ListView는 목록이 비어 있거나 비어있을 때 setVisibility를 GONE 및 VISIBLE로 자동 호출합니다.

+0

이것은 어댑터가로드 될 때 작동하지 않습니다. 어댑터가 비어 있거나 널 (null) 인 경우에만. – sandalone

+0

그러나로드 할 때 어댑터가 비어 있습니다. 또한로드가 완료된 후에 만 ​​어댑터를 목록에 설정할 수 있습니다. – Budius

관련 문제