如何在BaseActivity中使用ProgressBar而不是弃用的ProgressDialog?

时间:2018-05-04 11:43:17

标签: android progressdialog android-progressbar

由于API级别26已弃用ProgressDialog,我们如何才能使用ProgressBar?特别是,我们如何以可以在所有活动/片段中共享的方式来实现它?

BaseActivity中ProgressDialog的示例用法:

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来提供内容。

1 个答案:

答案 0 :(得分:-2)

活动

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

现在这是一种简单而不安全的方法。

Antoher的做法是将其实施到您的活动中。在xml中放一个progresbar。

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模式。