Android 如何在BaseActivity中使用ProgressBar而不是不推荐的ProgressDialog?
既然API级别26中已经弃用了,我们如何使用它呢?特别是,我们如何能够以一种可以在所有活动/片段之间共享的方式来实现这一点 在BaseActivity中使用ProgressDialog的示例:Android 如何在BaseActivity中使用ProgressBar而不是不推荐的ProgressDialog?,android,progressdialog,android-progressbar,Android,Progressdialog,Android Progressbar,既然API级别26中已经弃用了,我们如何使用它呢?特别是,我们如何能够以一种可以在所有活动/片段之间共享的方式来实现这一点 在BaseActivity中使用ProgressDialog的示例: public abstract class BaseActivity extends AppCompatActivity { private ProgressDialog mProgressDialog; @Override public void showLoading() { //...
public abstract class BaseActivity extends AppCompatActivity {
private ProgressDialog mProgressDialog;
@Override
public void showLoading() {
//...
}
@Override
public void hideLoading() {
//..
}
现在这是一个非常干净的解决方案,因为ProgressDialog不是一个小部件,不需要是任何视图xml的一部分。由于ProgressBar必须在一个xml文件中声明,因此如何以与ProgressDialog相同的方式使用它
我正在使用一个带有相应的活动的导航抽屉
,我交换片段
来提供内容。活动
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中放置一个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模式。你有两个选择,要么选择一个带有进度条的自定义对话框。或者直接将进度条集成到布局中。选择更适合您的用例的选项。这是一种从模式弹出窗口的转变,它在任务进行时挂起您的整个应用程序。。。android建议取消这种模式对话框——只显示一个简单的progressbar,这样用户可以在后台服务运行时继续使用应用程序的其余部分。那么你的建议是将progressbar集成到DrawerActivity布局中?这是我的想法,但并没有提供最好的解决方案,例如,如果我想添加一些其他活动,我不会涵盖BaseActivity中的所有内容。。。我想我会使用自定义对话框,无论如何感谢@SagarNayakYou意思是((BaseActivity)getActivity())。showLoading()
用于片段,showLoading()
用于活动,但是如果getActivity()
返回空值呢?:)空检查一下,很明显吗?