由于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
来提供内容。
答案 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模式。