0

Есть, неопределенный progressBar который вращается, пока ListView контент готов быть показаны. И progressBar, и listView являются частью тех же Fragment.Как контролировать indeterminante ProgressBar, который не является частью ListView?

Так что я закодировал, что это progressBar сделан Visisble и ушел из AsyncTask, который выбирает контент.

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); 
    } 
} 

Однако progressBarзаморожен и не отжимает?!

Я попытался инстанцированием progressBar от onPreExecute, но внешняя progressBar не принимает parameteres я установил внутри 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); 

PS: Может быть, вы должны запустить его в UIthread так:

activity.runOnUiThread(new Runnable() { 
       public void run() { 
        //update progressBar 
       } 
      }); 
+0

Я сделал это. Но «ProgressBar» все еще не вращается. Кажется, как замороженный. Не обновляется индикатор выполнения. Это неопределенный индикатор выполнения. – sandalone

+0

Я отредактировал свой ответ, надеюсь, что это может помочь вам сейчас;) –

+0

Хорошая идея, которую я буду использовать в другом проекте, но ProgressBAr все еще заморожен. – sandalone

0

это это так просто, есть встроенный API для этой функции:

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

сделано! ListView автоматически вызовет setVisibility с GONE и VISIBLE, когда список пуст или нет.

+0

Это не работает, когда адаптер загружается. Только в случае, если адаптер пуст или пуст. – sandalone

+0

Но при загрузке адаптер пуст, вы также можете установить адаптер в список только после завершения загрузки. – Budius

Смежные вопросы