Как использовать ProgressBar вместо устаревшего ProgressDialog в BaseActivity? - PullRequest
0 голосов
/ 04 мая 2018

Поскольку ProgressDialog устарел на уровне API 26, как мы можем вместо этого использовать ProgressBar ? В частности, как мы можем сделать это таким образом, чтобы его можно было использовать для всех видов деятельности / фрагментов?

Пример использования ProgressDialog в BaseActivity:

public abstract class BaseActivity extends AppCompatActivity {

private ProgressDialog mProgressDialog;

@Override
public void showLoading() {
    //...
}

@Override
public void hideLoading() {
    //..
}

Теперь это очень чистое решение, потому что ProgressDialog не является виджетом и не должен быть частью какого-либо представления XML. Поскольку ProgressBar должен быть объявлен в одном из XML-файлов, как использовать его так же, как ProgressDialog здесь?

Я использую NavigationDrawer с соответствующим Activity и меняю местами Fragment s для предоставления контента.

1 Ответ

0 голосов
/ 04 мая 2018

Активность

public abstract class BaseActivity extends AppCompatActivity {
    private ProgressBar progressBar;

    public void showLoading() {
        progressBar.setVisibility(View.Visible);
    }

    public void hideLoading() {
        progressBar.setVisibility(View.Gone);
    }
}

Фрагмент

((BaseActivity) getContext).showLoading();

Теперь это простой и небезопасный способ сделать это.

Другой способ сделать это - внедрить это в свою деятельность. Поместите прогресбар в xml.

public interface OnProgressChanged {
    void show();
    void hide();
}

затем на каждом фрагменте

OnProgressChanged onProgressChangedListener;

@override
onAttach(Context context) {
    Activity activity = null;

    if (context instanceof Activity){
        activity = (Activity) context;
    }

    try {
        onProgressChangedListener = (OnProgressChanged) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement OnProgressChanged");
    } catch(NullPointerException e) {
        throw new ClassCastException("Error: onAttach(Context context) -> context not instance of Activity");
    }
}


// somewhere else in the code
onProgressChangedListener.show();

Есть много способов сделать то, что вы хотите. Я бы посмотрел на модель MVP, если бы я был тобой.

...