Мне кажется, что обобщение того, что вы хотите, - это метод слушателя или делегата, который ваш пользовательский ListView может вызывать, когда AsyncTask ListView достигает onPostExecute
. Это сделает ваш пользовательский компонент многократно используемым (например, что если вы используете его в другом представлении с ProgressBar
, имеющим другой идентификатор?)
Я бы создал внутренний интерфейс (com.example.ListView.AsyncTaskCompletionListener
или что-то подобное) с одним методом (например, onAsyncTaskComplete
), дал бы com.example.ListView
переменную экземпляра этого типа, и чтобы Activity реализовал интерфейс и способ.
В onPostExecute
вашего пользовательского ListView AsyncTask проверьте, что переменная экземпляра слушателя не равна нулю, а затем вызовите метод интерфейса для нее.
Когда вы настраиваете ListView в Activity, устанавливаете переменную экземпляра слушателя ListView на экземпляр Activity (myListView.setAsyncTaskCompletionListener(this);
), а внутри метода слушателя вы можете установить видимость ProgressBar в GONE.
Фрагменты ListView:
package com.example;
public class ListView extends android.widget.ListView {
private AsyncTaskCompletionListener listener;
public AsyncTaskCompletionListener getAsyncTaskCompletionListener() {
return listener;
}
public void setAsyncTaskCompletionListener(AsyncTaskCompletionListener atcl) {
listener = atcl;
}
...
public interface AsyncTaskCompletionListener {
public void onAsyncTaskComplete();
}
private MyAsyncTask extends AsyncTask<Void,Void,Void> {
...
protected void onPostExecute(Void result) {
if (listener != null) {
listener.onAsyncTaskComplete();
}
}
}
}
Фрагмент вашей активности:
public MyActivity extends android.app.Activity implements com.example.ListView.AsyncTaskCompletionListener {
com.example.ListView customListView;
ProgressBar progressBar;
...
public void onCreate(Bundle savedInstanceState) { // Could be onResume or somewhere else
...
progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);
customListView = (com.example.ListView)findViewById(R.id.bottomactionbar);
customListView.setAsyncTaskCompletionListener(this);
}
...
public void onAsyncTaskComplete() {
progressBar.setVisibility(View.GONE);
}
}